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

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

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

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

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

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

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

給 Python 標(biāo)注類型

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

❯ python --version
Python 3.7.0

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

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

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

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

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

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

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

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

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

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

使用 typing

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

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

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

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

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

這與實際業(yè)務(wù)場景不符,因為我們寫代碼時,在一個列表中裝入的往往都是同一類型。 為了在取元素時獲得補全提示,我們可以使用 typing.List + 極簡的泛型 。如下。

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

題外話:聰明的 Pylance

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

結(jié)語

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

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

相關(guān)文章

  • python實現(xiàn)用戶管理系統(tǒng)

    python實現(xiàn)用戶管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)用戶管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python實現(xiàn)裝飾器、描述符

    python實現(xiàn)裝飾器、描述符

    本篇文章通過代碼實例給大家分享了python實現(xiàn)裝飾器、描述符模擬代碼的過程,對戲需要的讀者可以參考下。
    2018-02-02
  • Python?Pandas數(shù)據(jù)合并pd.merge用法詳解

    Python?Pandas數(shù)據(jù)合并pd.merge用法詳解

    在合并數(shù)據(jù)的操作中,除了pd.concat()函數(shù),另一個常用的函數(shù)就是pd.merge()了,下面這篇文章主要給大家介紹了關(guān)于Python?Pandas數(shù)據(jù)合并pd.merge用法的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • python的pstuil模塊使用方法總結(jié)

    python的pstuil模塊使用方法總結(jié)

    這篇文章主要介紹了python的pstuil模塊使用方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • python?ES連接服務(wù)器的方法詳解

    python?ES連接服務(wù)器的方法詳解

    使用Python連接Elasticsearch服務(wù)器進行數(shù)據(jù)搜索和分析是一項常見操作,本文詳細(xì)介紹了如何使用elasticsearch-py客戶端庫連接到Elasticsearch服務(wù)器,并執(zhí)行創(chuàng)建索引、添加文檔及搜索等基本操作
    2024-10-10
  • python輸出電腦上所有的串口名的方法

    python輸出電腦上所有的串口名的方法

    今天小編就為大家分享一篇python輸出電腦上所有的串口名的方法,具有好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python ckeditor富文本編輯器代碼實例解析

    Python ckeditor富文本編輯器代碼實例解析

    這篇文章主要介紹了Python ckeditor富文本編輯器代碼實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Django設(shè)置Postgresql的操作

    Django設(shè)置Postgresql的操作

    這篇文章主要介紹了Django設(shè)置Postgresql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python與json數(shù)據(jù)的交互詳情

    python與json數(shù)據(jù)的交互詳情

    這篇文章主要介紹了python與json數(shù)據(jù)的交互詳情,json是一種獨立于編程語言和平臺的輕量級數(shù)據(jù)交換方式,更多相關(guān)內(nèi)容介紹,需要的朋友可以參考一下
    2022-07-07
  • nginx+uwsgi+django環(huán)境搭建的方法步驟

    nginx+uwsgi+django環(huán)境搭建的方法步驟

    這篇文章主要介紹了nginx+uwsgi+django環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評論