最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你用Type Hint提高Python程序開(kāi)發(fā)效率

 更新時(shí)間:2016年08月08日 16:24:54   投稿:daisy  
本文通過(guò)介紹和實(shí)例教大家如何利用Type Hint來(lái)提升Python程序開(kāi)發(fā)效率,對(duì)大家使用python開(kāi)發(fā)很有幫助,有需要的參考學(xué)習(xí)。

簡(jiǎn)介

Type Hint(或者叫做PEP-484)提供了一種針對(duì)Python程序的類型標(biāo)注標(biāo)準(zhǔn)。

為什么使用Type Hint?對(duì)于動(dòng)態(tài)語(yǔ)言而言,常常出現(xiàn)的情況是當(dāng)你寫(xiě)了一段代碼后,隔段時(shí)間你可能忘記這個(gè)方法的原型是什么樣子的了,你也不清楚具體應(yīng)該傳入什么類型的參數(shù),這樣往往需要你去閱讀代碼才能定義每個(gè)類型具體是什么。或者當(dāng)你使用一個(gè)文檔并不是特別完全的第三方庫(kù),你不知道這個(gè)庫(kù)應(yīng)該如何使用,這都會(huì)很痛苦。

現(xiàn)在,借助Type Hint,你可以實(shí)現(xiàn):

     1、實(shí)現(xiàn)類型檢查,防止運(yùn)行時(shí)出現(xiàn)的類型不符合情況。

     2、作為文檔附加屬性,方便開(kāi)發(fā)者調(diào)用時(shí)傳入傳出的參數(shù)類型。

     3、提升IDE的檢查機(jī)制,在智能提示時(shí)更快給出提示和類型檢查結(jié)果。

實(shí)現(xiàn)這個(gè)過(guò)程中,你需要使用Python 3.5+中提供的新模塊typing值得注意的是,這個(gè)改動(dòng)并不會(huì)影響程序運(yùn)行,僅僅是為了方便類型檢查器實(shí)現(xiàn)的。

Type Hint類型檢查器

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

從簡(jiǎn)單的例子開(kāi)始

從簡(jiǎn)單的例子開(kāi)始,我們先從一個(gè)簡(jiǎn)單的程序開(kāi)始,運(yùn)行環(huán)境為Python 3.5.2,使用mypy工具進(jìn)行檢查。

首先通過(guò)pip install mypy-lang命令安裝mypy工具。注意是mypy-lang,之所以是這樣,是因?yàn)樵趐ypi里mypy這個(gè)名字已經(jīng)被占用掉了。

接下來(lái),通過(guò)mypy檢查下面這個(gè)文件

# 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))

在命令行中執(zhí)行命令mypy fib.py,獲取返回結(jié)果:

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

但是在實(shí)際的應(yīng)用過(guò)程中,這個(gè)功能在Python里是可以正常運(yùn)行的:

➜ mypy python fib.py
0
1

可以看到,mypy工具提示了我們的代碼中存在一處類型不匹配的問(wèn)題,但是如果不進(jìn)行檢查,代碼有可能執(zhí)行出不可預(yù)知的結(jié)果。

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

從簡(jiǎn)單到復(fù)雜,類型組合怎么辦?

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

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

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

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:

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

關(guān)于生產(chǎn)的一些閑扯

我們現(xiàn)在也在進(jìn)行一些mypy工具在生產(chǎn)環(huán)境中的具體使用測(cè)試,但是我們也發(fā)現(xiàn)了一些存在的問(wèn)題,比如Python本身的動(dòng)態(tài)語(yǔ)言特性給類型標(biāo)注就帶來(lái)了一些麻煩。另外,變量復(fù)用導(dǎo)致的類型變換有可能會(huì)提示采用新的變量實(shí)現(xiàn)。這對(duì)于一個(gè)已經(jīng)存在的線上項(xiàng)目來(lái)說(shuō)相對(duì)成本較高,我們后續(xù)也會(huì)在一些新項(xiàng)目中采用這種方式。另外mypy還是一個(gè)比較新的項(xiàng)目,本身是擁有一些bug。另外一個(gè)是在某些mypy的非類型錯(cuò)誤提示其實(shí)非常的模糊,導(dǎo)致很多錯(cuò)誤有時(shí)需要進(jìn)行人工排查。

不管怎樣,即便在mypy存在一些缺陷,但是仍舊是未來(lái)非常有潛力的工具,提前了解和應(yīng)用也能有效的提升程序的強(qiáng)壯性。以上就是利用Type Hint提升Python程序開(kāi)發(fā)效率的全部?jī)?nèi)容,希望本文對(duì)大家使用python有所幫助。

相關(guān)文章

  • python實(shí)現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁(yè)核心內(nèi)容

    python實(shí)現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁(yè)核心內(nèi)容

    這篇文章主要為大家介紹了python實(shí)現(xiàn)精準(zhǔn)搜索并提取網(wǎng)頁(yè)核心內(nèi)容的實(shí)現(xiàn),有需要的的朋友可以借鑒參考下,希望能有所幫助祝大家多多進(jìn)步
    2021-11-11
  • Django token 生成與驗(yàn)證的實(shí)現(xiàn)

    Django token 生成與驗(yàn)證的實(shí)現(xiàn)

    本文主要介紹了Django token 生成與驗(yàn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • TensorFlow安裝CPU版本和GPU版本的實(shí)現(xiàn)步驟

    TensorFlow安裝CPU版本和GPU版本的實(shí)現(xiàn)步驟

    本文主要介紹了TensorFlow安裝CPU版本和GPU版本的實(shí)現(xiàn)步驟,文中通過(guò)圖文示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Python中查看變量的類型內(nèi)存地址所占字節(jié)的大小

    Python中查看變量的類型內(nèi)存地址所占字節(jié)的大小

    這篇文章主要介紹了Python中查看變量的類型,內(nèi)存地址,所占字節(jié)的大小,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python標(biāo)準(zhǔn)庫(kù)sched模塊使用指南

    Python標(biāo)準(zhǔn)庫(kù)sched模塊使用指南

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)sched模塊使用的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 關(guān)于Python Socket編程的要點(diǎn)詳解

    關(guān)于Python Socket編程的要點(diǎn)詳解

    Socket是網(wǎng)絡(luò)編程的一個(gè)抽象概念,通常我們用一個(gè)Socket表示“打開(kāi)了一個(gè)網(wǎng)絡(luò)鏈接”,而打開(kāi)一個(gè)Socket需要知道目標(biāo)計(jì)算機(jī)的IP地址和端口號(hào),再指定協(xié)議類型即可,這篇文章主要給大家介紹了關(guān)于Python Socket編程的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python 無(wú)損批量壓縮圖片(支持保留圖片信息)的示例

    python 無(wú)損批量壓縮圖片(支持保留圖片信息)的示例

    這篇文章主要介紹了python 無(wú)損批量壓縮圖片的示例,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-09-09
  • Python 連接 MySQL 的幾種方法

    Python 連接 MySQL 的幾種方法

    這篇文章主要介紹了Python 連接 MySQL 的幾種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Django用戶登錄與注冊(cè)系統(tǒng)的實(shí)現(xiàn)示例

    Django用戶登錄與注冊(cè)系統(tǒng)的實(shí)現(xiàn)示例

    這篇文章主要介紹了Django用戶登錄與注冊(cè)系統(tǒng)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解

    python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解

    這篇文章主要介紹了python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解,涉及python讀,寫(xiě)excel—xlwt常用功能,xlutils 常用功能,xlwt寫(xiě)Excel時(shí)公式的應(yīng)用等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評(píng)論

景宁| 定结县| 开阳县| 娱乐| 攀枝花市| 安泽县| 汨罗市| 交城县| 隆德县| 郯城县| 大港区| 奉节县| 怀远县| 琼结县| 江都市| 大悟县| 石泉县| 乳源| 岐山县| 洪洞县| 申扎县| 隆化县| 龙岩市| 广州市| 皮山县| 全椒县| 郯城县| 福海县| 秦安县| 灌阳县| 余姚市| 凤翔县| 睢宁县| 贵德县| 越西县| 海安县| 平塘县| 营口市| 石泉县| 塔河县| 南丹县|