日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python添加類型標(biāo)注|散發(fā)著自由松散氣息的代碼

本文轉(zhuǎn)載自微信公眾號「Piper蛋窩」,作者Piper蛋。轉(zhuǎn)載本文請聯(lián)系Piper蛋窩公眾號。

站在用戶的角度思考問題,與客戶深入溝通,找到振安網(wǎng)站設(shè)計與振安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋振安地區(qū)。

Python 如此簡潔,書寫者在聲明變量時甚至無需考慮類型。

但是簡潔與復(fù)雜間,是存在一個平衡點(diǎn)的。當(dāng)我們書寫較為復(fù)雜的項(xiàng)目時,還是希望可以擁有「靜態(tài)類型語言」強(qiáng)大的類型檢查和智能的提示。

好消息是,并不需要像 TypeScript 那樣,引入一個新的編譯器來給 JavaScript 做“升級”來進(jìn)行類型檢查, Python 自帶的 typing 工具可以在一定程度上把 Python 變成「靜態(tài)類型語言」;壞消息是, Python 歸根結(jié)底不是「靜態(tài)類型語言」,經(jīng)過我的簡單測試,其代碼還是「自由松散」的。

給 Python 標(biāo)注類型

首先和讀者聲明我們的實(shí)驗(yàn)環(huán)境。

 
 
 
 
  1.  python --version 
  2. Python 3.7.0 

本文參考了 Python3.7 的 中文文檔[1] 。

我們聲明一個變量,通過如下方式聲明類型:

 
 
 
 
  1. a: int = 1 
  2. b: float = .2 
  3. print(f'{a}, ')  # 1, 0.2 

遺憾的是,在 Python 中,a: int = 1 這句話并沒什么意義,說的直白點(diǎn),就是『脫褲子放屁』;再說得好聽點(diǎn), Python 的類型標(biāo)注放在這里這么用完全沒有必要。

首先, a = 1 中解釋器會自動把 a 推斷為 int 類型,諸如 Pylance 的 Language Server 也會在我們書寫時提供 int 的方法補(bǔ)全。

此外,就算我們把 a 的類型規(guī)定為 int ,然后將 str 賦給 a ,解釋器和 Language Server 也完全不會報錯。如下。

 
 
 
 
  1. a: int 
  2. a = '1' 
  3. print(a)  # 非常迷 

做上述類型檢查對于現(xiàn)代編譯技術(shù)而言應(yīng)該是毫無難度的,但這里就是沒有報錯、沒有警告。這大概與 Python 的設(shè)計哲學(xué)有關(guān)。

我們看看 TypeScript 是如何表現(xiàn)的:

TypeScript 把自己當(dāng)作靜態(tài)類型語言,要求書寫時就確保類型的正確性。

使用 typing

盡管 Python 并不強(qiáng)制要求類型的正確性,并且會自動幫我們做強(qiáng)類型轉(zhuǎn)換,但是我們依舊可以享受類型標(biāo)注帶來的諸多便利。

比如,我們現(xiàn)在要定義一個函數(shù) foo ,函數(shù)返回一個列表 dogList ,列表中的元素都是我們自定義的類 Dog 的實(shí)例。

如果沒有類型標(biāo)注,我們無法獲得智能提示,如下。

Python 中從來就不要求 List 對象中的元素都是同一類型,因此,解釋器或者 Language Server 也不會「吃力不討好」般地去把程序運(yùn)行一邊,然后推斷你這個 List 里放的東西是什么類型。

自然,當(dāng)你從 List 中拿元素時(比如上述的 dogList[0] ),它沒法告訴你 List 中你拿的元素是什么類型,也就沒辦法提示(No suggestion.)。

**這與實(shí)際業(yè)務(wù)場景不符,因?yàn)槲覀儗懘a時,在一個列表中裝入的往往都是同一類型。**為了在取元素時獲得補(bǔ)全提示,我們可以使用 typing.List + 極簡的泛型 。如下。

我們規(guī)定, foo 返回的元素必是一個 List ,且其中元素類型是 Dog 類型。然后我們的 dogList[0] 也被識別成了 Dog 類型,獲得了補(bǔ)全。舒服。

題外話:聰明的 Pylance

其實(shí) Pylance 自己也可以做一些類型推導(dǎo)。比如我們使用生成器生成列表時, Pylance 就會判斷這個列表中元素屬于什么類型:

結(jié)語

關(guān)于 typing 的用法,還有很多內(nèi)容可以討論,我的參考資料主要是:Python3.7 的 typing中文文檔[2] 。此外,用 Python 泛型實(shí)現(xiàn)函數(shù)重載相比靜態(tài)類型語言似乎十分麻煩(我參考了Python實(shí)用寶典的文章(知乎)[3]),如果之后我遇到合適的場景也會成文分享。


分享文章:Python添加類型標(biāo)注|散發(fā)著自由松散氣息的代碼
網(wǎng)址分享:http://www.5511xx.com/article/ccehehd.html