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

python typing模塊--類型提示支持

 更新時間:2021年10月26日 08:40:16   作者:Silent丿丶黑羽  
這篇文章主要介紹python typing模塊類型提示支持, typing 模塊只有在python3.5以上的版本中才可以使用,pycharm目前支持typing檢查,下面進入文章一起了解詳細內容吧

1、typing介紹

Python是一門弱類型的語言,很多時候我們可能不清楚函數參數的類型或者返回值的類型,這樣會導致我們在寫完代碼一段時間后回過頭再看代碼,忘記了自己寫的函數需要傳什么類型的參數,返回什么類型的結果,這樣就不得不去閱讀代碼的具體內容,降低了閱讀的速度, typing 模塊可以很好的解決這個問題

注意: typing 模塊只有在python3.5以上的版本中才可以使用,pycharm目前支持typing檢查

2、typing的作用

  • 類型檢查,防止運行時出現參數和返回值類型不符合。
  • 作為開發(fā)文檔附加說明,方便使用者調用時傳入和返回參數類型。
  • 該模塊加入后并不會影響程序的運行,不會報正式的錯誤,只有提醒pycharm目前支持typing檢查,參數類型錯誤會黃色提示

3、常用類型

  • int,long,float: 整型,長整形,浮點型;
  • bool,str: 布爾型,字符串類型;
  • List, Tuple, Dict, Set:列表,元組,字典, 集合;
  • Iterable,Iterator:可迭代類型,迭代器類型;
  • Generator:生成器類型;

除了以上常用的類型,還支持 Any , Union , Tuple Callable , TypeVar Generic 類型組成。有關完整的規(guī)范,請參閱 PEP 484 。有關類型提示的簡單介紹,請參閱 PEP 483

3.1 代碼示例

我們可以發(fā)現,func函數要求傳入的第2個參數為 str 類型,而我們調用時傳入的參數是 int 類型,此時Pycharm就會用黃色來警告你,我們將光標放到黃色的地方,會出現下面的提示

寫著期望類型是 str ,而現在是 int ,但是 typing 的作用僅僅是提示,并不會影響代碼執(zhí)行,我們執(zhí)行看看

執(zhí)行結果如下:

[2, 3]

我們會發(fā)現并沒有報錯,因為 typing 僅僅是起到了提醒的作用

4、typing模塊的其他用法

  • 類型別名
  • NewType
  • Callable
  • TypeVar泛型
  • Any類型
  • Union類型

4.1 類型別名

類型別名,就是給復雜的類型取個別名

# 給List[float]類型取個別名為Vector
Vector = List[float]


def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]

new_vector = scale(2.0, [1.0, -4.2, 5.4])

當然,類型別名我們完全可以不用,用以下寫法也一樣,看個人喜好

def scale(scalar: float, vector: List[float]) -> List[float]:
    return [scalar * num for num in vector]


4.2 NewType

官網看了下,個人覺得這個沒啥用,就不細寫了

4.3 Callable

期望特定簽名的回調函數的框架可以將類型標注為 Callable[[Arg1Type, Arg2Type], ReturnType] 。

[Arg1Type, Arg2Type]:代表參數類型
ReturnType:代表返回值類型

from typing import Callable


def get_next_item(name: str):
    print(name)

# Callable 作為函數參數使用,其實只是做一個類型檢查的作用,檢查傳入的參數值 get_next_item 是否為可調用對象
def feeder(get_next_item: Callable[[str], None]) -> (str):
    return get_next_item


v1 = feeder(get_next_item)
v1('hello')

# 結果
hello

4.4 TypeVar泛型

可以自定義一個任意類型,也可以自定義指定類型

自定義一個任意類型

# 自定義一個任意類型
T = TypeVar('T')


def func(user: T) -> T:
    print(user)
    return user


func('1')
func(1)
func([1])
func((1, 2))
func({"status": 200})

# 結果
1
1
[1]
(1, 2)
{'status': 200}


自定義指定類型

# 指定為int或者str
a = TypeVar('a', int, str)

s1: a = 1
s2: a = 'aaa'
s3: a = []  # 這里定義了列表,pycharm會出現黃色警告

print(s1, s2, s3)

# 結果
1 aaa []

4.5 Any

Any 是一種特殊的類型。靜態(tài)類型檢查器認為所有類型均與 Any 兼容,同樣, Any 也與所有類型兼容。

也就是說,可對 Any 類型的值執(zhí)行任何操作或方法調用,并賦值給任意變量:

from typing import Any

a = None    # type: Any
a = []      # OK
a = 2       # OK

s = ''      # type: str
s = a       # OK

def foo(item: Any) -> int:
    # Typechecks; 'item' could be any type,
    # and that type might have a 'bar' method
    item.bar()
    ...

此外,未指定返回值與參數類型的函數,都隱式地默認使用 Any

def legacy_parser(text):
    ...
    return data

# 兩種寫法效果是一樣的
def legacy_parser(text: Any) -> Any:
    ...
    return data

4.6 Union

Union類型語法格式: Union[X, Y] ,相當于 X | Y ,意思是類型是X或者Y

如果我們想定義 Union 類型,就要寫成如下的eg: Union[X, Y] ,或者也可以使用縮寫X | Y(此寫法python3.10版本才支持)

from typing import Union

# 指定變量a的類型為int或者str
a: Union[int, str]
a = 1
print(a)

a = []  # 定義了一個列表,pycharm會有黃色警告提示

到此這篇關于python typing模塊--類型提示支持的文章就介紹到這了,更多相關python typing模塊內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于Python中zipfile壓縮包模塊的使用

    關于Python中zipfile壓縮包模塊的使用

    這篇文章主要介紹了關于Python中zipfile壓縮包模塊的使用,zipfile?模塊提供了創(chuàng)建、讀取、寫入、添加及列出?ZIP?文件的工具,本文做一個簡單的總結,需要的朋友可以參考下
    2023-04-04
  • Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態(tài)HTML內容

    Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態(tài)HTML內容

    這篇文章主要介紹了Python爬蟲使用Selenium+PhantomJS抓取Ajax和動態(tài)HTML內容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • python實現不同數據庫間數據同步功能

    python實現不同數據庫間數據同步功能

    這篇文章主要介紹了python實現不同數據庫間數據同步功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python 尋找離散序列極值點的方法

    python 尋找離散序列極值點的方法

    今天小編就為大家分享一篇python 尋找離散序列極值點的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python列表與列表算法詳解

    python列表與列表算法詳解

    這篇文章主要介紹了Python的列表和列表算法,具有一定參考價值,需要的朋友可以了解下,希望能給你帶來幫助
    2021-08-08
  • Python實現按鍵精靈版的連點器

    Python實現按鍵精靈版的連點器

    這篇文章主要為大家詳細介紹了如何利用Python實現按鍵精靈版的連點器,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-06-06
  • Python中集合的創(chuàng)建及常用函數的使用詳解

    Python中集合的創(chuàng)建及常用函數的使用詳解

    這篇文章主要為大家詳細介紹了Python中集合的創(chuàng)建、使用和遍歷,集合常見的操作函數,集合與列表,元組,字典的嵌套,感興趣的小伙伴可以了解一下
    2022-06-06
  • python 音頻處理重采樣、音高提取的操作方法

    python 音頻處理重采樣、音高提取的操作方法

    這篇文章主要介紹了python 音頻處理重采樣、音高提取,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • python實現通訊錄系統(tǒng)

    python實現通訊錄系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現通訊錄系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python讀取ZIP和TAR格式壓縮包的實現

    Python讀取ZIP和TAR格式壓縮包的實現

    本文介紹了使用Python讀取ZIP和TAR格式的壓縮包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01

最新評論

汝阳县| 屏南县| 二手房| 黄冈市| 开原市| 沙田区| 绥滨县| 当雄县| 沐川县| 彭水| 龙游县| 肇庆市| 乌鲁木齐市| 阳城县| 永兴县| 新营市| 福州市| 云梦县| 博兴县| 上蔡县| 宁陵县| 商丘市| 铅山县| 涪陵区| 奉节县| 类乌齐县| 奇台县| 阿拉尔市| 富宁县| 雷州市| 鄱阳县| 交口县| 河西区| 思茅市| 宣城市| 普兰店市| 德州市| 德惠市| 南华县| 泗洪县| 永胜县|