日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python标注审核_Python类型标注

發(fā)布時(shí)間:2025/3/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python标注审核_Python类型标注 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

機(jī)器學(xué)習(xí)越來越火,大量的機(jī)器學(xué)習(xí)包都支持Python,導(dǎo)致了Python近幾年非常火爆,入手門檻低,編程簡單,概念非常少。越來越多的新手小白加入到Python編程。

Python雖然簡單,但也帶來很多問題。尤其是弱類型一直被詬病,平時(shí)在寫代碼時(shí),經(jīng)常也會(huì)模糊參數(shù)的類型,導(dǎo)致debug難度增加。

自從Python3.5以來,發(fā)布了typing包,推薦標(biāo)注類型,并且IDE會(huì)檢查類型,讓Python看起來有點(diǎn)靜態(tài)語言的感覺了。本文主要參考Python3.7.5的

常用的類型

常用的幾種類型,如int, float, str, List, Tuple, Dict。接下來看幾個(gè)例子: 首先必須從typing中導(dǎo)入類型

from typing import List, Dict, Tuple

def greeting(name: str) -> str:

return 'Hello ' + name

print(greeting(188))

如果你輸入的參數(shù)不是str,IDE就會(huì)提示。

如果傳入List, Tuple, Dict,需要用[]來指定內(nèi)部基礎(chǔ)類型.

def do_nothing(a: List[int], b: Tuple[int, str], c: Dict[str, int]) -> Dict[str, str]:

return {'key': 'value'}

# 調(diào)用

do_nothing([19], (14, 'some'), {"ha": 10})

除此之外基礎(chǔ)類型是可以相互嵌套的,比如字典的值是列表,列表中存放元組,于是可以這樣標(biāo)注:

def do_nothing(a: Dict[str, List[Tuple[int, int, int]]], ):

pass

比較復(fù)雜的類型標(biāo)注用起來并不是很方便,我們可以根據(jù)業(yè)務(wù)指定別名。比如計(jì)算一個(gè)點(diǎn)與多個(gè)點(diǎn)的距離,List中存放的Tuple是點(diǎn)Point,坐標(biāo)就是三維的浮點(diǎn)數(shù),于是可以定義別名

Point = Tuple[float, float, float]

def compute_distance(p1: Point, points: List[Point]):

pass

多種類型

不是多個(gè)參數(shù),而是多類型,是輸入?yún)?shù)可能存在多種類型,這種情況在Java中多態(tài)來解決。而Python本身是弱類型,輸入?yún)?shù)沒有強(qiáng)制規(guī)定,這個(gè)時(shí)候該怎么辦?比如傳入?yún)?shù)可能為int, str, float.typing包給我們提供了辦法,可以用Union來定義:

Union[int, str, float]

輸入?yún)?shù)必須是必須是int, str, float.其中之一。如果不確定數(shù)據(jù)的類型,可以標(biāo)示為Any類型,表示任意類型。如果輸入?yún)?shù)可能是None值,也可以用Union定義:

Union[str, None]

# 或者

Optional[str]

函數(shù)作為輸入?yún)?shù)

如果函數(shù)作為輸入?yún)?shù),如何標(biāo)記類型呢?其實(shí)也不復(fù)雜,函數(shù)是callable的類型,同樣指定傳入和傳出參數(shù)即可。我們來看一個(gè)求和的函數(shù),第一個(gè)參數(shù)就是函數(shù)。add_all只是把所有的元素相加,至于對(duì)每個(gè)元素做什么操作,取決于傳入的函數(shù)了。

def add_all(f: Callable[[int], int], params: List[int]):

return sum(map(f, params))

print(add_all(lambda x: x**2, list(range(1, 10))))

這里要注意的是函數(shù)作為參數(shù),有輸入和輸出值。定義較為麻煩,func: Callable[[int], int],輸入?yún)?shù)內(nèi)部嵌套了中括號(hào),仔細(xì)想想也能明白,如果func: Callable[int, int]定義,那么輸入?yún)?shù)和輸出參數(shù)該怎么理解呢?想明白了,你就理解了。

返回生成器

生成器在Python是非常常用的,可以很大提高程序的運(yùn)行效率。如果需要返回生成器對(duì)象該怎么做呢?從typing包中導(dǎo)入Generator.我們來看一下例子,輸入列表list,需要每次返回num個(gè)數(shù)據(jù)塊。

from typing import List, Generator

import math

def get_data(l: List[int], num: int) -> Generator:

"""

輸入list, 每次按照num個(gè)數(shù) 返回?cái)?shù)據(jù)塊

:param l: list data

:param num: batch size

"""

epochs = math.ceil(len(l) / num)

for epoch in range(epochs):

yield l[epoch * num:(epoch + 1) * num]

for each in get_data(list(range(98)), 5):

print(each)

小結(jié)

本文分別列舉了常用參數(shù)的類型標(biāo)注方法,同時(shí)也給出了多種參數(shù)類型,以及函數(shù)和生成器作為參數(shù)輸入的類型標(biāo)注方法。參數(shù)的類型標(biāo)注是很重要的,一方面可以幫助你理解每個(gè)參數(shù)的類型,另一方面也增強(qiáng)了代碼的可讀性。尤其是別人讀到你的代碼,調(diào)用起來會(huì)清晰很多。更多詳細(xì)的說明可以查看官方文檔或者源碼。

覺得文章還不錯(cuò),可以關(guān)注我的微信公眾號(hào):數(shù)學(xué)編程。

總結(jié)

以上是生活随笔為你收集整理的python标注审核_Python类型标注的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。