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

解讀python中的類型提示(type hint)

 更新時(shí)間:2023年01月31日 10:04:24   作者:johnjim0816  
這篇文章主要介紹了解讀python中的類型提示(type hint),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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 ansible服務(wù)及劇本編寫

    python ansible服務(wù)及劇本編寫

    python語言是運(yùn)維人員必會(huì)的語言,而ansible是一個(gè)基于Python開發(fā)的自動(dòng)化運(yùn)維工具 (saltstack)。其功能實(shí)現(xiàn)基于SSH遠(yuǎn)程連接服務(wù);ansible可以實(shí)現(xiàn)批量系統(tǒng)配置、批量軟件部署、批量文件拷貝、批量運(yùn)行命令等功能
    2017-12-12
  • Python如何操作office實(shí)現(xiàn)自動(dòng)化及win32com.client的運(yù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-04
  • python進(jìn)階_淺談面向?qū)ο筮M(jìn)階

    python進(jìn)階_淺談面向?qū)ο筮M(jìn)階

    下面小編就為大家?guī)硪黄猵ython進(jìn)階_淺談面向?qū)ο筮M(jìn)階。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Python?pandas?DataFrame基礎(chǔ)運(yùn)算及空值填充詳解

    Python?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-07
  • Python中請使用isinstance()判斷變量類型

    Python中請使用isinstance()判斷變量類型

    這篇文章主要介紹了Python中請使用isinstance()判斷變量類型,本文先是給出了isinstance函數(shù)判斷變量類型的例子,并對isinstance 和 type的區(qū)別做了講解,需要的朋友可以參考下
    2014-08-08
  • spyder常用快捷鍵(分享)

    spyder常用快捷鍵(分享)

    下面小編就為大家?guī)硪黄猻pyder常用快捷鍵(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Python3標(biāo)準(zhǔn)庫之dbm UNIX鍵-值數(shù)據(jù)庫問題

    Python3標(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-03
  • python實(shí)現(xiàn)提取str字符串/json中多級(jí)目錄下的某個(gè)值

    python實(shí)現(xiàn)提取str字符串/json中多級(jí)目錄下的某個(gè)值

    今天小編就為大家分享一篇python實(shí)現(xiàn)提取str字符串/json中多級(jí)目錄下的某個(gè)值,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python多路復(fù)用selector模塊的基本使用

    Python多路復(fù)用selector模塊的基本使用

    Python提供了selector模塊來實(shí)現(xiàn)IO多路復(fù)用,這篇文章給大家介紹了Python多路復(fù)用selector模塊的基本使用,感興趣的朋友一起看看吧
    2021-11-11
  • 使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務(wù)器

    使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務(wù)器

    這篇文章主要介紹了使用Jupyter notebooks上傳文件夾或大量數(shù)據(jù)到服務(wù)器,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評論