最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談怎么給Python添加類型標(biāo)注

 更新時(shí)間:2021年06月08日 16:23:58   作者:枇杷鷺  
今天給大家?guī)?lái)的文章是Python的相關(guān)知識(shí),文章圍繞著怎么給Python添加類型標(biāo)注展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下

Python 添加類型標(biāo)注

Python 如此簡(jiǎn)潔,書(shū)寫者在聲明變量時(shí)甚至無(wú)需考慮類型。

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

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

給 Python 標(biāo)注類型

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

❯ python --version
Python 3.7.0

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

我們聲明一個(gè)變量,通過(guò)如下方式聲明類型:

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

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

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

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

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

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

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

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

使用 typing

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

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

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

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

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

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

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

題外話:聰明的 Pylance

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

結(jié)語(yǔ)

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

到此這篇關(guān)于淺談怎么給Python添加類型標(biāo)注的文章就介紹到這了,更多相關(guān)Python添加類型標(biāo)注內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的異步:async?和?await以及操作中的事件循環(huán)、回調(diào)和異常

    Python中的異步:async?和?await以及操作中的事件循環(huán)、回調(diào)和異常

    在現(xiàn)代編程中,異步操作在處理?I/O?密集型任務(wù)時(shí),可以顯著提高程序的性能和響應(yīng)速度,Python?提供了?async?和?await?關(guān)鍵字,使得編寫異步代碼變得更加直觀和簡(jiǎn)潔,在這篇文章中,我們將深入探討?Python?的異步操作,并通過(guò)實(shí)際代碼示例來(lái)說(shuō)明其使用方法
    2024-12-12
  • Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】

    Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】

    這篇文章主要介紹了Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了Python使用socket套接字實(shí)現(xiàn)基于UDP協(xié)議的數(shù)據(jù)發(fā)送端與接收端相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Python pip通過(guò)requirements.txt 文件安裝依賴

    Python pip通過(guò)requirements.txt 文件安裝依賴

    requirements.txt是定義項(xiàng)目依賴的python包,可通過(guò)工具生成,本文主要介紹了Python pip通過(guò)requirements.txt文件安裝依賴,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Python語(yǔ)法快速入門指南

    Python語(yǔ)法快速入門指南

    這篇文章主要介紹了Python語(yǔ)法快速入門指南,包括注釋和引號(hào)的使用等基本語(yǔ)法知識(shí),需要的朋友可以參考下
    2015-10-10
  • Python tkinter進(jìn)度條控件(Progressbar)的使用

    Python tkinter進(jìn)度條控件(Progressbar)的使用

    這篇文章主要介紹了Python tkinter進(jìn)度條控件(Progressbar)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python沖頂大會(huì) 快來(lái)答題!

    Python沖頂大會(huì) 快來(lái)答題!

    直播答題沖頂大會(huì),你玩了嗎?本文為大家分享了10道Python測(cè)試題,你答對(duì)1道算我輸
    2018-01-01
  • python決策樹(shù)之CART分類回歸樹(shù)詳解

    python決策樹(shù)之CART分類回歸樹(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了python決策樹(shù)之CART分類回歸樹(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單步驟分享

    Python操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單步驟分享

    這篇文章主要給大家介紹了關(guān)于Python操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 詳解Python編程中time模塊的使用

    詳解Python編程中time模塊的使用

    這篇文章主要介紹了詳解Python編程中time模塊的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • Django中的用戶身份驗(yàn)證示例詳解

    Django中的用戶身份驗(yàn)證示例詳解

    這篇文章主要給大家介紹了關(guān)于Django中用戶身份驗(yàn)證的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

睢宁县| 鹰潭市| 达拉特旗| 尉犁县| 娄烦县| 岗巴县| 十堰市| 化隆| 濮阳县| 抚远县| 冷水江市| 元氏县| 册亨县| 长白| 宣城市| 咸丰县| 广水市| 莱芜市| 铜鼓县| 南京市| 芦山县| 威海市| 南宁市| 丘北县| 湘乡市| 平泉县| 旬邑县| 河池市| 秦皇岛市| 绥芬河市| 新竹县| 十堰市| 弥勒县| 石狮市| 增城市| 榆社县| 东莞市| 洛南县| 株洲市| 贺州市| 青铜峡市|