1. 程式人生 > >pycahrm使用docstrings來指定變量類型、返回值類型、函數參數類型

pycahrm使用docstrings來指定變量類型、返回值類型、函數參數類型

col 函數 很快 裏的 大量 代碼補全 nic sss def

py裏面不需要顯示聲明類型,這和java c這些靜態語言不同,雖然python這樣做少了一些代碼和寫代碼的困難度,但還是非常多的弊端的,運行速度 代碼安全, 這些都是語言本身帶來的本的弊端,這些沒辦法沒辦法彌補(說用c擴展和加入大量if isinstance來判斷類型的,這是不好的不方便的)。但下面這兩種卻是可以通過docstrings來彌補的。

1.沒有類型就給函數(或者方法)調用者帶來麻煩,這個函數怎麽用,這個參數代表什麽,需要傳一個什麽樣的參數來調用這個函數,函數返回什麽東西,這都對代碼閱讀者和函數使用者帶來很大麻煩。

2.沒有類型就得不到第三方編輯器的有力提示和自動補全補全,pycharm不知道這個變量是個什麽類型的對象,還咋能通過 點號 來補全呢,代碼不能補全和智能提示,那用第三方ide工具和使用vim 記事本有什麽區別。除了內置的int float str list什麽的對象,可能會比較熟悉他們的一些方法,當大量使用自定義的calss類型時候,不能補全和提示是個災難。至於有些qq群友說用一直vim寫幾千行代碼的文件,說什麽自己是大牛,不屑使用第三方ide工具,對這種純粹的裝逼犯我就不想說什麽了。

在python3.6裏面可以使用新的語法格式來指明函數的參數和返回類型

例如

def func(x: int ) -> str:

psss

這樣做了不僅有利於閱讀傳什麽返回什麽,更是有利於編輯器自動推斷類型達到代碼補全的目的,這裏的指定類型可以是python自帶的內置類型 int dict list什麽的,也可以是第三方庫的類的類型,也可以是自己定義的類的類型。

在py3.6中這麽使用如圖,但除了函數參數和返回類型外,本地變量可以借助docstring來完成。

技術分享

在py2裏面不能使用上面的語法,可以使用dcostings來解決。

def func(x,y):
    
""" :type x: list ##參數類型 :type y: str :rtype :dict ###返回值類型 """ z = funxxxxxxxxxxxxxx() """:type :set""" ###指定本地變量的類型 z.add() x.append() func([2,3],4).popitem() ###此處也是自動補全的

這樣做了以後,就更清晰了,那麽調用這個func時候,就會知道要傳什麽類型的參數了,返回什麽類型的結果。更為有利的是只需要敲入一個x.a就能自動補全成x.append了。同理y z func的結果都可以補全。

包括自定義的類也是可以指定的,下圖這個cu參數是一個Chinaunicome的類的實例,如果不指定類型,很多很長的方法要手寫。一旦方法拼錯了,這個對象壓根就沒這個方法,點擊運行,python也不能很快報錯,只能到運行到那一行的時候才報錯,這個報錯太遲了,老是這樣反復通過運行來測試很影響效率和心情。對於靜態語言,很多錯誤是提前還沒運行就在編譯時候給你報錯了,即使拼寫錯誤也無所謂了,馬上改就行。動態語言是當運行到那段代碼才報錯,這樣對於拼寫錯誤造成的代碼錯誤實在是太坑了。

技術分享

處理一個requests的response對象。

技術分享

pycahrm使用docstrings來指定變量類型、返回值類型、函數參數類型