typing模組 型別標註的有效工具

2021-10-08 14:06:55 字數 3300 閱讀 4839

python是一門解釋型、動態型別語言。所謂的解釋型指:語法在執行時執行而無需提前編譯。所謂動態型別指:變數的型別無需建立時顯式宣告,直譯器會在執行時指向可能的型別。這些特點使得python靈活、彈性,但也會導致**閱讀的不便,進而導致**維護的困難。因此從3.5版本開始,python引入了typing模組提供型別提示功能(注意:僅僅是提示,即使傳入值與規定不符,也不會報錯!),而pycharm的ide也能夠據此進行型別檢測和自動補全提示。

使用typing模組來書寫函式的基本格式如下:

from typing import list

from functools import

reduce

deffunc

(x:str

, y: list)

->

str:

return x +

' '+

reduce

(lambda a, b:

str(a)

+str

(b), y)

if __name__ ==

'__main__'

:print

(func(

'hello',[

'w',

'o',

'r',

'l',

'd']))

# hello world

引數後面接:type指定型別提示,)後接->type指定返回值型別提示。定義完成後,可通過物件的__annotations__屬性檢視所有定義的型別宣告。

常見的型別標註包括:

1. 基礎變數型別

包括字元型str,位元組型bytes,整數型int,浮點型float,布林型bool,空型別none等,直接指定即可,無需使用typing模組。

def

func

(x:str

, y:

int)

->

str:

return x +

str(y)

2. 容器型別

比如列表list,元組tuple, 字典型別dict,集合型別set,對映型別map, 序列型別sequence

# 1. 例子1:

def(a:

str, b:

int, c:

str, d:

float)-

> tuple[

float

,str]:

return b+d, a+c

# 2. 例子2:

defcat

(babies: sequence[

str]

str,

str])-

>

none

:print

("it has babies: {} and has attrs: {}"

.format

(','

.join(babies)

, attrs)

)3. 可迭代型別

包括可迭代物件型別iterable、迭代器型別iterator和生成器型別generator.

4. 可執行型

callable,即實現了__call__方法的物件,注意callable本省需要同時指定輸入和輸出的物件型別,且輸入和輸出之間、各輸入引數之間均通過中括號分隔。

from typing import callable, list

from functools import

reduce

deffunc

(x:str

, y: list)

->

str:

return x +

' '+

reduce

(lambda a, b:

str(a)

+str

(b), y)

deffunc2

(f:callable[

[str

, list]

,str

], x:

str, y: list)

->

none

:print

(f(x, y)

)if __name__ ==

'__main__'

: func2(func,

'hello',[

'w',

'o',

'r',

'l',

'd']

)

5. 泛型

所謂泛型型別,指可以讓乙個類或方法支援多種資料型別,從而提高**的可復用性,和靈活性。

在typing庫中涉及泛型定義的包括generictypevarunionopiton等。其中opition(type1)的效果等同於union(type1, none),而union

from typing import union, typevar

# 例子1

a = typevar(

'a',

str,

bytes

)# str或bytes, 通過定義統一的typevar可以方便操作

deflongest

(x: a, y: a)

-> a:

'''return the longest of two strings.'''

return x if

len(x)

>=

len(y)

else y

# 例子2

defpprint

(x: union[

str,

bytes])

->

none

:# str或bytes

print

(x)

python匯入自己的模組(親測有效)

主要針對匯入模組和 不在同一目錄的情況。在 頭部新增,例如要新增的模組所在目錄為 users xx xx datas import sys import datas新增完上面的 在datas目錄中建立乙個 init py的檔案 vi init py在 init py中匯入新增的模組,例如要新增的模組...

電源模組散熱的三種有效方法

電源模組能量從高溫區傳遞到低溫區域基礎方法有三種 輻射 傳輸和對流。輻射 不一樣溫度的兩個物塊間發熱量的電磁感應傳遞。傳輸 發熱量通過固態介質的傳遞。對流 發熱量通過流體介質 氣體 的傳遞。在各種各樣的具體運用中,全部三種發熱量傳遞的方法常有不一樣水平的效果。在絕大多數運用中,對流是最關鍵的發熱量傳...

MM模組102,122,161移動型別之間的區別

今天來給大家說說mm模組移動型別102 122 166之間的關係和異同點。一 總述 1 102 主要用於處理因操作人員人為原因產生的錯誤 如錄入數量等等 2 122 主要用於處理當月因 商送來貨物的質量問題等原因,需要進行退貨 3 166 主要用於跨月向 商退貨的業務 二 區別 1 102與122異...