Python作為一門動態語言,其變量的類型可以自由變化。這個特性提高了代碼的開發效率,卻也增加了閱讀代碼和維護代碼的難度。
假設有一個變量is_request_finished,從名字上來看,這個變量的值應該為True或者False,在寫代碼的時候,最初也確實是這樣定義的。但是可能由于某些原因,在某一次賦值的時候,is_request_finished = 'True'。此時,如果代碼的單元測試不夠完善,那么if is_request_finished在is_request_finished = True和is_request_finished = 'True'的時候都成立,問題被隱藏了。但是當is_request_finished = 'False'的時候,由于'False'作為一個非空字符串,就會使得if is_request_finished依然成立,從而使程序的行為發現異常。
單個變量的類型異常也許還容易發現,但是如果變量是放在字典或者列表里面,那就比較麻煩了。假設需要保存一段個人信息,于是創建了下面這樣一個列表套字典的數據結構:
這種方式開發起來非常的快速而方便,但是其他人甚至是開發者自己在一段時間以后讀代碼,都會有一種想抽死自己的沖動。因為根本不知道這個變量里面保存的是什么東西。
針對以上問題,常見的解決辦法有三種。
Type Hints 與 Variable Annotations
在PEP 484中,引入了Type Hints,在PEP 526中引入了Variable Annotations。它使得Python 3.6及以后的Python 代碼擁有了“聲明”變量類型的能力。這里的“聲明”之所以會打引號,是因為這個聲明是給IDE和人看的。這個聲明對 Python 的解釋器無效。
Type Hints
PyCharm現在已經可以比較好地支持Type Hints了。例如下面這一段代碼:
模擬一段上傳文件的函數,上傳成功以后返回True。接收一個參數url。在正常情況下,這個url應該是一個字符串。于是,使用Type Hints,代碼可以變為:
如果直接運行,其運行效果如下圖所示:
現在假設傳遞一個不是字符串的變量給upload函數,此時PyCharm就會提示類型有問題,如下圖所示:
但提示歸提示,強行運行也是沒有問題的。這就說明Type Hints主要是給IDE和人用的,解釋器并不會關心類型正不正確。
如果修改這個函數的返回值,讓它不返回True或者False,PyCharm 也會發出警告:
Type Hints的官方文檔,可以參閱:typing —Support for type hints
Variable Annotations
對于Variable Annotations,如下圖所示,雖然目前PyCharm還不能很好地提示變量類型不對,但是人在讀代碼的時候,還是會起到一定的幫助。
除了這種寫法外,Variable Annotations還支持把類型寫在注釋中,如下圖所示:
雖然PyCharm不能起到很好的提示作用,但是可以使用一個第三方庫mypy來對代碼做靜態檢查,其運行效果如下圖所示,可以發現賦值的類型與聲明的類型不一致(expression has type “str”, variable has type “bool”, 表達式的類型為“str”,變量的類型是“bool”)。
關于Variable Annotations的更多用法,可以參閱:Syntax for Variable Annotations關于Mypy,可以參閱它的官方文檔。
docstring
在docstring來標注變量的類型,如下圖所示:
這種寫法可以用來提示一個函數,或者一個類它里面的各個變量的情況。但是詳細程度需要看開發者有沒有耐心把這個注釋寫清楚。
Bean
這種方法來自與Java Bean的思想,它主要用來解決列表套字典,字典套字典,字典套列表,列表套列表這種深層的嵌套關系。
-
數據結構
+關注
關注
3文章
573瀏覽量
40124 -
變量
+關注
關注
0文章
613瀏覽量
28361 -
python
+關注
關注
56文章
4793瀏覽量
84634
原文標題:Python變量很難記?記住變量類型的三種方式
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論