成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 添加類型標注 | 散發著自由松散氣息的代碼

開發 后端
Python 如此簡潔,書寫者在聲明變量時甚至無需考慮類型。但是簡潔與復雜間,是存在一個平衡點的。當我們書寫較為復雜的項目時,還是希望可以擁有「靜態類型語言」強大的類型檢查和智能的提示。

[[404010]]

本文轉載自微信公眾號「Piper蛋窩」,作者Piper蛋。轉載本文請聯系Piper蛋窩公眾號。

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

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

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

給 Python 標注類型

首先和讀者聲明我們的實驗環境。

  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 這句話并沒什么意義,說的直白點,就是『脫褲子放屁』;再說得好聽點, Python 的類型標注放在這里這么用完全沒有必要。

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

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

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

做上述類型檢查對于現代編譯技術而言應該是毫無難度的,但這里就是沒有報錯、沒有警告。這大概與 Python 的設計哲學有關。

我們看看 TypeScript 是如何表現的:

TypeScript 把自己當作靜態類型語言,要求書寫時就確保類型的正確性。

使用 typing

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

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

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

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

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

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

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

題外話:聰明的 Pylance

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

結語

 

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

 

責任編輯:武曉燕 來源: Piper蛋窩
相關推薦

2011-05-12 10:07:29

筆記本評測

2013-02-27 14:18:00

無線路由器華碩無線網絡鏈接

2011-08-12 10:46:57

Linux

2020-07-19 10:57:45

滿天星繪制代碼

2014-03-03 14:47:48

2010-03-18 16:17:29

Python 變量類型

2024-11-13 09:18:09

2012-08-02 15:20:10

移動支付

2009-08-19 15:50:52

松散耦合

2022-03-14 09:33:44

微軟JavaScripTypeScript

2020-03-18 16:24:54

surface

2021-04-16 15:04:07

GitGit工作樹Linux

2010-06-03 19:38:26

Hadoop

2023-11-22 11:31:52

CIOIT管理

2022-02-13 16:34:07

互聯網大廠大廠員工一線城市

2012-02-24 17:01:47

聯想筆記本

2020-08-03 13:59:12

LRU滴滴司機CPU

2022-07-14 16:18:32

massCode開源

2024-05-14 15:28:09

Python類型提示開發

2013-02-19 11:03:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲久久在线 | 一区在线播放 | 日韩亚洲一区二区 | 久久久www成人免费精品 | 欧洲精品久久久久毛片完整版 | 精品在线一区二区三区 | 91av视频在线观看 | 成人免费观看视频 | 久久久精品视频一区二区三区 | 91亚洲国产精品 | 国产一区二区三区在线 | 黄视频网址 | 特黄特色大片免费视频观看 | 欧美一级在线 | 亚洲人成免费 | 国产高清一区二区三区 | 99国内精品久久久久久久 | 成人免费视频 | 91精品国产美女在线观看 | 欧美一区二区三区在线观看视频 | 九九福利| 欧美日韩国产一区二区三区 | 日韩欧美一区二区在线播放 | 日韩中文视频 | 成人小视频在线 | 黄网站在线观看 | 蜜桃臀av一区二区三区 | 欧美日韩久久 | 欧美日韩久久精品 | 在线观看国产www | 中文字幕一区二区三区四区五区 | 别c我啊嗯国产av一毛片 | 日韩欧美一区二区三区在线播放 | 美女在线国产 | 国产婷婷精品av在线 | 国产日韩欧美一区 | 久久久看 | 中文字幕精品一区二区三区精品 | 国产精品99久久久久久动医院 | 天堂精品 | 久久国产精品网站 |