欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Python中的變量類型標注

 更新時間:2023年04月11日 10:48:25   作者:*_花非人陌_*  
變量類型注解是用來對變量和函數(shù)的參數(shù)返回值類型做注解,讓調(diào)用方減少類型方面的錯誤,也可以提高代碼的可讀性和易用性。本文就來和大家聊聊Python中的變量類型標注吧

一、概述

1、描述

變量類型注解是用來對變量和函數(shù)的參數(shù)返回值類型做注解,讓調(diào)用方減少類型方面的錯誤,也可以提高代碼的可讀性和易用性。

但是,變量類型注解語法傳入的類型表述能力有限,不能說明復(fù)雜的類型組成情況,因此引用了typing模塊,來實現(xiàn)復(fù)雜的類型表達。

2、常用的數(shù)據(jù)類型

TypeDescription
int整型 integer
float浮點數(shù)字
bool布爾(int 的子類)
str字符 (unicode)
bytes8 位字符
object任意對象(公共基類)
List[str]字符組成的列表
Tuple[int, int]兩個int對象的元組
Tuple[int, ...]任意數(shù)量的 int 對象的元組
Dict[str, int]鍵是 str 值是 int 的字典
Iterable[int]包含 int 的可迭代對象
Sequence[bool]布爾值序列(只讀)
Mapping[str, int]從 str 鍵到 int 值的映射(只讀)
Any具有任意類型的動態(tài)類型值
Union聯(lián)合類型
Optional參數(shù)可以為空或已經(jīng)聲明的類型
Mapping映射,是 collections.abc.Mapping 的泛型
MutableMappingMapping 對象的子類,可變
Generator生成器類型, Generator[YieldType、SendType、ReturnType]
NoReturn函數(shù)沒有返回結(jié)果
Set集合 set 的泛型, 推薦用于注解返回類型
AbstractSetcollections.abc.Set 的泛型,推薦用于注解參數(shù)
Sequencecollections.abc.Sequence 的泛型,list、tuple 等的泛化類型
TypeVar自定義兼容特定類型的變量
Generic自定義泛型類型
NewType聲明一些具有特殊含義的類型
Callable可調(diào)用類型, Callable[[參數(shù)類型], 返回類型]
NoReturn沒法返回值

3、mypy模塊

mypy是Python的可選靜態(tài)類型檢查器

安裝mypy模塊 pip3 install mypy

使用mypy進行靜態(tài)類型檢查 mypy 執(zhí)行 python 文件

二、使用

1、基本使用

from typing import List, Set, Dict, Tuple
#對于簡單的 Python 內(nèi)置類型,只需使用類型的名稱
x1: int = 1
x2: float = 1.0
x3: bool = True
x4: str = "test"
x5: bytes = b"test"
 
# 對于 collections ,類型名稱用大寫字母表示,并且
# collections 內(nèi)類型的名稱在方括號中
x6: List[int] = [1]
x7: Set[int] = {6, 7}
#對于映射,需要鍵和值的類型
x8: Dict[str, float] = {'field': 2.0}
#對于固定大小的元祖,指定所有元素的類型
x9: Tuple[int, str, float] = (3, "yes", 7.5)
#對于可變大小的元祖,使用一種類型和省略號
x10: Tuple[int, ...] = (1, 2, 3)
 
'''在終端執(zhí)行檢查
(venv) D:\python>mypy .\01.py
Success: no issues found in 1 source file
'''

2、函數(shù)參數(shù)返回值添加類型標注

1. 指定多個參數(shù)的方式

'''
定義一個函數(shù)   參數(shù) num int類型
返回值 字符串類型
使用mypy檢測
'''
def num_fun(num: int) -> str:
    return str(num)
 
num_fun(100)
print(num_fun(100))
 
# 指定多個參數(shù)的方式
def plus(num1: int, num2: int) -> int:
    return num1 + num2
 
# 在類型注釋后為參數(shù)添加默認值,默認值需要添加在末尾
'''
聲明函數(shù)參數(shù)時,所有帶有默認值的參數(shù)必須放在非默認參數(shù)的后面。
這是因為 Python 解釋器需要確定參數(shù)傳遞的順序,
如果默認參數(shù)放在非默認參數(shù)前面,解釋器就無法確定哪個參數(shù)是哪個
'''
def func1(num1: int, my_float: float = 3.5)-> float:
    return num1 + my_float
print(func1(10,20))
f = func1
print(f(10))

2. Callable

Callable 是一個抽象類,用于描述可調(diào)用對象的基本行為,例如函數(shù)、方法和類。當你聲明一個函數(shù)變量并將其分配給一個變量時,這個變量只是一個普通的 Python 對象,并不是一個可調(diào)用對象,因此它沒有默認值

帶有默認值的參數(shù)可以放在任何位置,但是在聲明函數(shù)參數(shù)時,所有帶有默認值的參數(shù)必須放在非默認參數(shù)的后面。這是因為 Python 解釋器需要確定參數(shù)傳遞的順序,如果默認參數(shù)放在非默認參數(shù)前面,解釋器就無法確定哪個參數(shù)是哪個。

from typing import  Callable
#定義變量  指向一個函數(shù)
def func2(num1:int, my_float=3.5) -> str:
    return f'返回結(jié)果{num1 + my_float}'
print(func2(10))
#Callable指向可調(diào)用(函數(shù))值的方式
x: Callable[[int, float], str] = func2
print(x(10, 3.5))
 
'''
執(zhí)行結(jié)果
返回結(jié)果13.5
返回結(jié)果13.5
'''

3. Iterator

#定義函數(shù),產(chǎn)生整數(shù)的生成器,每次返回一個
from typing import Iterator
# 產(chǎn)生整數(shù)的生成器函數(shù)安全地返回只是一個 整數(shù)迭代器的函數(shù)
#,因此這就是我們對其進行注釋的方式
def g(n: int) -> Iterator[int]:
    i = 0
    while i < n:
        yield i #下次迭代時,代碼從 yield 的下一條語句(不是下一行)開始執(zhí)行
        i += 1
 
print(g(10))
for i in g(10):
    print(i)
 
'''執(zhí)行結(jié)果
<generator object g at 0x00000000014E88E0>
0
1
2
3
4
5
6
7
8
9
'''

3、混合類型檢查改進

1.聯(lián)合運算符

聯(lián)合運算符使用 " | "  線來替代了舊版本中Union[] 方法,使得程序更簡潔

#新版本
def get_name(user: str | dict) -> str:
    if isinstance(user, str):
        return user
    elif isinstance(user, dict):
        return user.get('name', '')
print(get_name({'name':'Bob'}))
print(get_name("Alice"))

在這個例子中,函數(shù)get_name接受一個參數(shù)user,它可以是一個字符串或一個字典。如果user是一個字符串,函數(shù)會直接返回這個字符串;如果user是一個字典,函數(shù)會嘗試從字典中獲取name字段的值,并返回它。

在這個例子中,我們使用聯(lián)合運算符將str和dict類型組合起來,表示user可以是這兩種類型之一。

#舊版本,Union方法來實現(xiàn)相同的功能
from typing import Union
def get_name2(user: Union[str, dict]) -> str:
    if isinstance(user, str):
        return user
    elif isinstance(user, dict):
        return user.get('name', '')
 
print(get_name2({'name':'Bob'}))
print(get_name2("Alice"))
'''執(zhí)行結(jié)果
Bob
Alice
'''

4、類型別名更改

#舊版本
oldname = str
def oldFunc(param:oldname) -> oldname:
    return param + param
oldFunc('oldFunc:花非人陌')
 
 
#新版本,從3.10后開始支持
from typing import TypeAlias
 
newstr :TypeAlias = str    #定義類型別名
newint :TypeAlias = int
def func_test(num:newint, msg:newstr)->newstr:
    return str(num) + msg
print(func_test(100,"類型名稱更改"))

到此這篇關(guān)于深入了解Python中的變量類型標注的文章就介紹到這了,更多相關(guān)Python變量類型標注內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pandas的to_datetime時間轉(zhuǎn)換使用及學(xué)習(xí)心得

    pandas的to_datetime時間轉(zhuǎn)換使用及學(xué)習(xí)心得

    這篇文章主要給大家介紹了關(guān)于pandas的to_datetime時間轉(zhuǎn)換使用及學(xué)習(xí)心得的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用pandas具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python采集貓眼兩萬條數(shù)據(jù) 對《無名之輩》影評進行分析

    Python采集貓眼兩萬條數(shù)據(jù) 對《無名之輩》影評進行分析

    這篇文章主要給大家介紹了關(guān)于利用Python榮國采集兩萬條貓眼數(shù)據(jù),對《無名之輩》影評進行分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Python將一個Excel拆分為多個Excel

    Python將一個Excel拆分為多個Excel

    這篇文章主要為大家詳細介紹了Python將一個Excel拆分為多個Excel,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 使用sklearn進行對數(shù)據(jù)標準化、歸一化以及將數(shù)據(jù)還原的方法

    使用sklearn進行對數(shù)據(jù)標準化、歸一化以及將數(shù)據(jù)還原的方法

    今天小編就為大家分享一篇使用sklearn進行對數(shù)據(jù)標準化、歸一化以及將數(shù)據(jù)還原的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 利用python批量給云主機配置安全組的方法教程

    利用python批量給云主機配置安全組的方法教程

    這篇文章主要給大家介紹了利用python批量給云主機配置安全組的方法教程,文中介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • python數(shù)據(jù)庫編程 ODBC方式實現(xiàn)通訊錄

    python數(shù)據(jù)庫編程 ODBC方式實現(xiàn)通訊錄

    這篇文章主要為大家詳細介紹了python數(shù)據(jù)庫編程,ODBC方式實現(xiàn)通訊錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 解決Pytorch自定義層出現(xiàn)多Variable共享內(nèi)存錯誤問題

    解決Pytorch自定義層出現(xiàn)多Variable共享內(nèi)存錯誤問題

    這篇文章主要介紹了解決Pytorch自定義層出現(xiàn)多Variable共享內(nèi)存錯誤問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Pycharm搭建Django項目詳細教程(看完這一篇就夠了)

    Pycharm搭建Django項目詳細教程(看完這一篇就夠了)

    這篇文章主要給大家介紹了關(guān)于Pycharm搭建Django項目的詳細教程,想要學(xué)習(xí)的小伙伴看完這一篇就夠了,pycharm是一種Python?IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,需要的朋友可以參考下
    2023-11-11
  • Python?自動控制原理?control的詳細解說

    Python?自動控制原理?control的詳細解說

    這篇文章主要介紹了Python自動控制原理control的詳細解說,文章圍繞主題展開對Python?control的介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • python中pd.cut()與pd.qcut()的對比及示例

    python中pd.cut()與pd.qcut()的對比及示例

    本文主要介紹了python中pd.cut()與pd.qcut()的對比及示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評論