欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

教你用Type Hint提高Python程序開發效率

系統 1609 0

簡介

Type Hint(或者叫做PEP-484)提供了一種針對Python程序的類型標注標準。

為什么使用Type Hint?對于動態語言而言,常常出現的情況是當你寫了一段代碼后,隔段時間你可能忘記這個方法的原型是什么樣子的了,你也不清楚具體應該傳入什么類型的參數,這樣往往需要你去閱讀代碼才能定義每個類型具體是什么。或者當你使用一個文檔并不是特別完全的第三方庫,你不知道這個庫應該如何使用,這都會很痛苦。

現在,借助Type Hint,你可以實現:

???? 1、實現類型檢查,防止運行時出現的類型不符合情況。

?????2、作為文檔附加屬性,方便開發者調用時傳入傳出的參數類型。

???? 3、提升IDE的檢查機制,在智能提示時更快給出提示和類型檢查結果。

實現這個過程中,你需要使用 Python 3.5+ 中提供的新模塊 typing 值得注意的是 ,這個改動并不會影響程序運行,僅僅是為了方便類型檢查器實現的。

Type Hint類型檢查器

目前,比如JetBrains家的PyCharm已經支持Type Hint語法檢查功能,如果你使用了這個IDE,可以通過IDE功能進行實現。如果你像我一樣,使用了SublimeText編輯器,那么第三方工具mypy可以幫助到你。AnacondaST3最近要發布的2.0版本也內置了mypy功能的支持,具體的進度可以看一下這個issue。一些其它的Python工具(比如代碼提示工具jedi 0.10+)也支持了Type Hint功能。

從簡單的例子開始

從簡單的例子開始,我們先從一個簡單的程序開始,運行環境為Python 3.5.2,使用mypy工具進行檢查。

首先通過 pip install mypy-lang 命令安裝mypy工具。 注意是mypy-lang ,之所以是這樣,是因為在pypi里mypy這個名字已經被占用掉了。

接下來,通過mypy檢查下面這個文件

            
# fib.py
from typing import Iterator


def fib(n: int) -> Iterator[int]:
  a, b = 0, 1
  while a < n:
    yield a
    a, b = b, a + b

i = fib(3.2)
print(next(i))
print(next(i))
          

在命令行中執行命令 mypy fib.py ,獲取返回結果:

            
? mypy fib.py
fib.py:11: error: Argument 1 to "fib" has incompatible type "float"; expected "int"
          

但是在實際的應用過程中,這個功能在Python里是可以正常運行的:

            
? mypy python fib.py
0
1
          

可以看到,mypy工具提示了我們的代碼中存在一處類型不匹配的問題,但是如果不進行檢查,代碼有可能執行出不可預知的結果。

在這個例子里面,我們使用了兩種類型,一種是Python基礎數據類型,比如str、int等等,這些類型數據是可以直接使用的;另外一種是來自于typing中引入的Iterator,用來表示迭代器類型。另外一個值得注意的是,typing中部分類型也會隨時添加,一般我們以演示版本為準。

從簡單到復雜,類型組合怎么辦?

實際上,在我們使用過程中還有可能傳遞一些更加復雜的參數類型,比如list類型,tuple類型等等,這類型的數據如何聲明呢?我們可以先看一個例子:

            
def foo(strings, string_list, count, total):
          

這個函數的參數我們從字面可以看出來分別是str,元素為str的list類型和兩個整數參數。我們假定一個返回值為 ((int, int), str), 那么這個類型檢查可以這樣定義:

            
from typing import List, Tuple

Result = Tuple[Tuple[int, int], str]

def foo(strings: str, lines: List[str], line_number: int, total_lines: int) -> Result:
          

其它的一些類型提示、協程等等的支持都可以在官方的typing模塊文檔中進行查看。

關于生產的一些閑扯

我們現在也在進行一些mypy工具在生產環境中的具體使用測試,但是我們也發現了一些存在的問題,比如Python本身的動態語言特性給類型標注就帶來了一些麻煩。另外,變量復用導致的類型變換有可能會提示采用新的變量實現。這對于一個已經存在的線上項目來說相對成本較高,我們后續也會在一些新項目中采用這種方式。另外mypy還是一個比較新的項目,本身是擁有一些bug。另外一個是在某些mypy的非類型錯誤提示其實非常的模糊,導致很多錯誤有時需要進行人工排查。

不管怎樣,即便在mypy存在一些缺陷,但是仍舊是未來非常有潛力的工具,提前了解和應用也能有效的提升程序的強壯性。以上就是利用Type Hint提升Python程序開發效率的全部內容,希望本文對大家使用python有所幫助。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区三区在线 | 日本 | 欧洲精品在线观看 | 欧美一区二区三区爽大粗免费 | 欧美性xx | 日日摸夜夜添夜夜添aa | 日本私人色多多 | 黄色一级a毛片 | 91精品国产综合久久久久 | 亚洲一区中文字幕 | 99精品99 | 欧美日本中文字幕 | 成人免费视频在线观看 | 交免费观看在线 | jdav视频在线观看免费 | 午夜丰满少妇高清毛片1000部 | 国产91成人精品亚洲精品 | 国产一区欧美 | 婷婷精品国产亚洲AV在线观看 | 天堂在线资源库 | 日本黄色免费看 | 成人欧美一区在线视频在线观看 | a级片在线免费看 | 成人性视频免费网站 | 国产成人自拍一区 | 国产小视频在线高清播放 | 业余护士毛茸茸 | 91视频.com| 日韩大片在线 | 久久国内精品自在自线400部o | 色中色在线视频 | www.欧美在线 | 成人午夜精品一区二区三区 | 久久综合丝袜长腿丝袜 | 99热人人| 亚洲成人在线视频播放 | 日夜啪| 久草在线免费福利视频 | 久久成人精品视频 | 国产乱码在线观看 | 欧美精品九九99久久在观看 | 日韩中文一区 |