人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

python typing模塊--類型提示支持

發(fā)布日期:2021-12-19 07:20 | 文章來源:腳本之家

1、typing介紹

Python是一門弱類型的語言,很多時(shí)候我們可能不清楚函數(shù)參數(shù)的類型或者返回值的類型,這樣會(huì)導(dǎo)致我們?cè)趯懲甏a一段時(shí)間后回過頭再看代碼,忘記了自己寫的函數(shù)需要傳什么類型的參數(shù),返回什么類型的結(jié)果,這樣就不得不去閱讀代碼的具體內(nèi)容,降低了閱讀的速度, typing 模塊可以很好的解決這個(gè)問題

注意: typing 模塊只有在python3.5以上的版本中才可以使用,pycharm目前支持typing檢查

2、typing的作用

  • 類型檢查,防止運(yùn)行時(shí)出現(xiàn)參數(shù)和返回值類型不符合。
  • 作為開發(fā)文檔附加說明,方便使用者調(diào)用時(shí)傳入和返回參數(shù)類型。
  • 該模塊加入后并不會(huì)影響程序的運(yùn)行,不會(huì)報(bào)正式的錯(cuò)誤,只有提醒pycharm目前支持typing檢查,參數(shù)類型錯(cuò)誤會(huì)黃色提示

3、常用類型

  • int,long,float: 整型,長整形,浮點(diǎn)型;
  • bool,str: 布爾型,字符串類型;
  • List, Tuple, Dict, Set:列表,元組,字典, 集合;
  • Iterable,Iterator:可迭代類型,迭代器類型;
  • Generator:生成器類型;

除了以上常用的類型,還支持 Any , Union Tuple , Callable , TypeVar Generic 類型組成。有關(guān)完整的規(guī)范,請(qǐng)參閱 PEP 484 。有關(guān)類型提示的簡(jiǎn)單介紹,請(qǐng)參閱 PEP 483

3.1 代碼示例

我們可以發(fā)現(xiàn),func函數(shù)要求傳入的第2個(gè)參數(shù)為 str 類型,而我們調(diào)用時(shí)傳入的參數(shù)是 int 類型,此時(shí)Pycharm就會(huì)用黃色來警告你,我們將光標(biāo)放到黃色的地方,會(huì)出現(xiàn)下面的提示

寫著期望類型是 str ,而現(xiàn)在是 int ,但是 typing 的作用僅僅是提示,并不會(huì)影響代碼執(zhí)行,我們執(zhí)行看看

執(zhí)行結(jié)果如下:

[2, 3]

我們會(huì)發(fā)現(xiàn)并沒有報(bào)錯(cuò),因?yàn)?typing 僅僅是起到了提醒的作用

4、typing模塊的其他用法

  • 類型別名
  • NewType
  • Callable
  • TypeVar泛型
  • Any類型
  • Union類型

4.1 類型別名

類型別名,就是給復(fù)雜的類型取個(gè)別名

# 給List[float]類型取個(gè)別名為Vector
Vector = List[float]

def scale(scalar: float, vector: Vector) -> Vector:
 return [scalar * num for num in vector]
new_vector = scale(2.0, [1.0, -4.2, 5.4])

當(dāng)然,類型別名我們完全可以不用,用以下寫法也一樣,看個(gè)人喜好

def scale(scalar: float, vector: List[float]) -> List[float]:
 return [scalar * num for num in vector]

4.2 NewType

官網(wǎng)看了下,個(gè)人覺得這個(gè)沒啥用,就不細(xì)寫了

4.3 Callable

期望特定簽名的回調(diào)函數(shù)的框架可以將類型標(biāo)注為 Callable[[Arg1Type, Arg2Type], ReturnType]

[Arg1Type, Arg2Type]:代表參數(shù)類型
ReturnType:代表返回值類型

from typing import Callable

def get_next_item(name: str):
 print(name)
# Callable 作為函數(shù)參數(shù)使用,其實(shí)只是做一個(gè)類型檢查的作用,檢查傳入的參數(shù)值 get_next_item 是否為可調(diào)用對(duì)象
def feeder(get_next_item: Callable[[str], None]) -> (str):
 return get_next_item

v1 = feeder(get_next_item)
v1('hello')
# 結(jié)果
hello

4.4 TypeVar泛型

可以自定義一個(gè)任意類型,也可以自定義指定類型

自定義一個(gè)任意類型

# 自定義一個(gè)任意類型
T = TypeVar('T')

def func(user: T) -> T:
 print(user)
 return user

func('1')
func(1)
func([1])
func((1, 2))
func({"status": 200})
# 結(jié)果
1
1
[1]
(1, 2)
{'status': 200}

自定義指定類型

# 指定為int或者str
a = TypeVar('a', int, str)
s1: a = 1
s2: a = 'aaa'
s3: a = []  # 這里定義了列表,pycharm會(huì)出現(xiàn)黃色警告
print(s1, s2, s3)
# 結(jié)果
1 aaa []

4.5 Any

Any 是一種特殊的類型。靜態(tài)類型檢查器認(rèn)為所有類型均與 Any 兼容,同樣, Any 也與所有類型兼容。

也就是說,可對(duì) Any 類型的值執(zhí)行任何操作或方法調(diào)用,并賦值給任意變量:

from typing import Any
a = None # type: Any
a = []# OK
a = 2 # OK
s = ''# type: str
s = a # OK
def foo(item: Any) -> int:
 # Typechecks; 'item' could be any type,
 # and that type might have a 'bar' method
 item.bar()
 ...

此外,未指定返回值與參數(shù)類型的函數(shù),都隱式地默認(rèn)使用 Any

def legacy_parser(text):
 ...
 return data
# 兩種寫法效果是一樣的
def legacy_parser(text: Any) -> Any:
 ...
 return data

4.6 Union

Union類型語法格式: Union[X, Y] ,相當(dāng)于 X | Y ,意思是類型是X或者Y

如果我們想定義 Union 類型,就要寫成如下的eg: Union[X, Y] ,或者也可以使用縮寫X | Y(此寫法python3.10版本才支持)

from typing import Union
# 指定變量a的類型為int或者str
a: Union[int, str]
a = 1
print(a)
a = []  # 定義了一個(gè)列表,pycharm會(huì)有黃色警告提示

到此這篇關(guān)于python typing模塊--類型提示支持的文章就介紹到這了,更多相關(guān)python typing模塊內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部