解讀python中的類型提示(type hint)
python類型提示(type hint)
在刷leetcode或者一些官方源碼的時(shí)候,經(jīng)??吹饺缦伦謽樱?/p>
class Solution: ? ? def sortList(self, head: ListNode) -> ListNode:
這就是類型提示(type hint),下面來個(gè)簡單的例子,
def greeting(name: str) -> str: ? ? return 'Hello ' + name
如上,其中name是傳入的參數(shù),而:右邊的str則是name期望的類型即str,而->則指向期望函數(shù)的返回類型。
如果不期望有返回值可以直接指向None,如下:
def feeder(get_next_item: Callable[[], str]) -> None:
Type Hints是雞肋還是最佳實(shí)踐?
定義一個(gè)這樣的函數(shù):
def add(a, b): print(a + b)
看簽名應(yīng)該不難猜出,這是做加法的,把參數(shù)a和b加起來。a和b應(yīng)該是兩個(gè)數(shù)字,或者兩個(gè)字符串。但不能一個(gè)數(shù)字一個(gè)字符串。
如果我們的目的就是為了加數(shù)字,最好能給一些說明。
為了實(shí)現(xiàn)這個(gè)目的,有兩種做法:
一種是加注釋:
#把參數(shù)a和b相加,a和b必須都是數(shù)字。 def add(a, b): print(a + b)
更好一點(diǎn)的做法是用docstring來寫:
def add(a, b): '''把參數(shù)a和b相加,a和b必須都是數(shù)字。''' print(a + b)
Type Hint
還有一種寫法就是用Type Hint,直接聲明參數(shù)的類型:
#為了簡單,這里假設(shè)只能處理整數(shù) def add(a:int, b:int) -> int: print(a + b)
Type Hint是Python3.6開始引入的一種特性。
- 通過變量名:變量類型的寫法指定參數(shù)的類型
- 通過**->返回值類型**的寫法指定返回值的數(shù)據(jù)類型。
除了可以用在方法中,也可以用在普通的變量上:
a:int #定義變量a,并指定a是int類型 a = 5 print(a)
Type Hint的作用
有了Type Hint,就可以做到類型安全了嗎?
并不是的,下面的代碼仍然能夠成功運(yùn)行:
a:int a = 5 print(a) a = 'hello' #把字符串賦值給a,并不會(huì)有運(yùn)行時(shí)錯(cuò)誤 print(a)
結(jié)合我前面講add函數(shù)的脈絡(luò),Type Hint的作用和注釋是一樣的,就是另外一種注釋手法而已,并不會(huì)Python解釋器產(chǎn)生任何影響。
如果是這樣,要它有何用?它有兩個(gè)用處:
1.給代碼的閱讀者更明確的類型提示,調(diào)用代碼的時(shí)候傳入錯(cuò)誤類型的可能性會(huì)降低,但完全靠自覺。
2.有了Type Hints,IDE可以在寫代碼的過程中就給你一些類型提示,這樣可以更順暢的寫出安全的代碼。
我應(yīng)該用嗎?
我的建議:
- 大部分情況下沒必要使用。知道就好。
- 如果寫共用的類庫,可以考慮使用。僅僅是考慮,也不一定要用。
我的理由是:
- 人生苦短,我用Python!如果非要夾(Java)里夾氣的,你去用Java或者其他的強(qiáng)類型語言好了。
- 畢竟用了Type Hint之后,代碼看起來啰嗦多了,而且也失去了Python動(dòng)態(tài)類型的一些優(yōu)勢。
- 還有一個(gè)理由,不加Type Hint,也可以使用Mypy實(shí)現(xiàn)類似的效果。
我們來看幾個(gè)常用的類庫,看看它們用不用。
- 小海龜turtle - NO:
- Pandas - NO
- Openpyxl - YES
所以啊,有的用了,有的沒用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python如何操作office實(shí)現(xiàn)自動(dòng)化及win32com.client的運(yùn)用
這篇文章主要介紹了Python如何操作office實(shí)現(xiàn)自動(dòng)化及win32com.client的運(yùn)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04python進(jìn)階_淺談面向?qū)ο筮M(jìn)階
下面小編就為大家?guī)硪黄猵ython進(jìn)階_淺談面向?qū)ο筮M(jìn)階。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08Python?pandas?DataFrame基礎(chǔ)運(yùn)算及空值填充詳解
pandas除了可以drop含有空值的數(shù)據(jù)之外,當(dāng)然也可以用來填充空值,下面這篇文章主要給大家介紹了關(guān)于Python?pandas?DataFrame基礎(chǔ)運(yùn)算及空值填充的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Python3標(biāo)準(zhǔn)庫之dbm UNIX鍵-值數(shù)據(jù)庫問題
dbm是面向DBM數(shù)據(jù)庫的一個(gè)前端,DBM數(shù)據(jù)庫使用簡單的字符串值作為鍵來訪問包含字符串的記錄。這篇文章主要介紹了Python3標(biāo)準(zhǔn)庫:dbm UNIX鍵-值數(shù)據(jù)庫的相關(guān)知識(shí),需要的朋友可以參考下2020-03-03python實(shí)現(xiàn)提取str字符串/json中多級(jí)目錄下的某個(gè)值
今天小編就為大家分享一篇python實(shí)現(xiàn)提取str字符串/json中多級(jí)目錄下的某個(gè)值,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務(wù)器
這篇文章主要介紹了使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務(wù)器,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04