欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python-typing: 類型標(biāo)注與支持 Any類型詳解

 更新時(shí)間:2021年05月10日 15:00:07   作者:G____G  
這篇文章主要介紹了Python-typing: 類型標(biāo)注與支持 Any類型詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

Any docs

Any 是一種特殊的類型。

靜態(tài)類型檢查器將所有類型視為與 Any 兼容,反之亦然, Any 也與所有類型相兼容。

這意味著可對(duì)類型為 Any 的值執(zhí)行任何操作或方法調(diào)用,并將其賦值給任何變量:

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 類型的值賦值給另一個(gè)更具體的類型時(shí),Python不會(huì)執(zhí)行類型檢查。例如,當(dāng)把 a 賦值給 s 時(shí),即使 s 被聲明為 str 類型,在運(yùn)行時(shí)接收到的是 int 值,靜態(tài)類型檢查器也不會(huì)報(bào)錯(cuò)。

此外,所有返回值無類型或形參無類型的函數(shù)將隱式地默認(rèn)使用 Any 類型:

def legacy_parser(text):
    ...
    return data
# A static type checker will treat the above
# as having the same signature as:
def legacy_parser(text: Any) -> Any:
    ...
    return data

當(dāng)需要混用動(dòng)態(tài)類型和靜態(tài)類型的代碼時(shí),上述行為可以讓 Any 被用作 應(yīng)急出口 。

Any 和 object 的行為對(duì)比。

與 Any 相似,所有的類型都是 object 的子類型。然而不同于 Any,反之并不成立: object 不是 其他所有類型的子類型。

這意味著當(dāng)一個(gè)值的類型是 object 的時(shí)候,類型檢查器會(huì)拒絕對(duì)它的幾乎所有的操作。把它賦值給一個(gè)指定了類型的變量(或者當(dāng)作返回值)是一個(gè)類型錯(cuò)誤。

比如說:

def hash_a(item: object) -> int:
    # Fails; an object does not have a 'magic' method.
    item.magic()
    ...
def hash_b(item: Any) -> int:
    # Typechecks
    item.magic()
    ...
# Typechecks, since ints and strs are subclasses of object
hash_a(42)
hash_a("foo")
# Typechecks, since Any is compatible with all types
hash_b(42)
hash_b("foo")

使用 object 示意一個(gè)值可以類型安全地兼容任何類型。使用 Any 示意一個(gè)值地類型是動(dòng)態(tài)定義的。

補(bǔ)充:python3.5 typing — 類型標(biāo)注支持

函數(shù)接受并返回一個(gè)字符串,注釋像下面這樣:

def greeting(name: str) -> str:
    return 'Hello' + name

在函數(shù) greeting 中,參數(shù) name 預(yù)期是 str 類型,并且返回 str 類型。子類型允許作為參數(shù)。

1.1. 類型別名

型別名通過將類型分配給別名來定義。在這個(gè)例子中, Vector 和 List[float] 將被視為可互換的同義詞:

from typing import List
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]
# typechecks; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4])

類型別名可用于簡(jiǎn)化復(fù)雜類型簽名。

例如:

from typing import Dict, Tuple, List
ConnectionOptions = Dict[str, str]
Address = Tuple[str, int]
Server = Tuple[Address, ConnectionOptions]
def broadcast_message(message: str, servers: List[Server]) -> None:
    ...
# The static type checker will treat the previous type signature as
# being exactly equivalent to this one.
def broadcast_message(
        message: str,
        servers: List[Tuple[Tuple[str, int], Dict[str, str]]]) -> None:
    ...

請(qǐng)注意,None 作為類型提示是一種特殊情況,并且由 type(None) 取代。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 分享Python獲取本機(jī)IP地址的幾種方法

    分享Python獲取本機(jī)IP地址的幾種方法

    這篇文章主要介紹了分享Python獲取本機(jī)IP地址的幾種方法,分享了使用專用網(wǎng)站、使用自帶socket庫(kù)、使用第三方netifaces庫(kù)等方式們需要的小伙伴可以參考一下
    2022-03-03
  • python刪除字符串中指定字符的方法

    python刪除字符串中指定字符的方法

    這篇文章主要介紹了python刪除字符串中指定字符的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 使用Python編寫腳本來生成隨機(jī)密碼

    使用Python編寫腳本來生成隨機(jī)密碼

    在數(shù)字化時(shí)代,密碼已成為我們保護(hù)個(gè)人信息和數(shù)據(jù)安全的重要手段,然而,手動(dòng)創(chuàng)建復(fù)雜且難以猜測(cè)的密碼是一項(xiàng)既繁瑣又容易出錯(cuò)的任務(wù),本文將詳細(xì)介紹如何使用Python編寫腳本來生成隨機(jī)密碼,并探討其背后的原理和技術(shù)細(xì)節(jié),需要的朋友可以參考下
    2024-10-10
  • python實(shí)現(xiàn)AI聊天機(jī)器人詳解流程

    python實(shí)現(xiàn)AI聊天機(jī)器人詳解流程

    事情是這樣的,最近認(rèn)識(shí)的一位小姐姐有每天早晨看天氣預(yù)報(bào)的習(xí)慣。在我看來,很多人起床第一件事情就是看微信消息,既然這樣,我就勉為其難每天早晨給小姐姐發(fā)送一則天氣預(yù)報(bào)吧
    2021-11-11
  • pygame實(shí)現(xiàn)俄羅斯方塊游戲(AI篇1)

    pygame實(shí)現(xiàn)俄羅斯方塊游戲(AI篇1)

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)俄羅斯方塊游戲AI的第1篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • python 解析html之BeautifulSoup

    python 解析html之BeautifulSoup

    項(xiàng)目里需要解析html,采用python語(yǔ)言實(shí)現(xiàn),發(fā)現(xiàn)了BeautifulSoup這個(gè)好用的東西,寫了一個(gè)程序,可能大家不知道,干什么用的,目的是讓大家知道如何使用 BeautifulSoup 當(dāng)然我這個(gè)是用都是很初級(jí)的,高級(jí)的使用,偶也沒有學(xué)會(huì)呢,太高深了
    2009-07-07
  • Python numpy數(shù)組轉(zhuǎn)置與軸變換

    Python numpy數(shù)組轉(zhuǎn)置與軸變換

    這篇文章主要介紹了Python numpy數(shù)組轉(zhuǎn)置與軸變換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 用Python制作檢測(cè)Linux運(yùn)行信息的工具的教程

    用Python制作檢測(cè)Linux運(yùn)行信息的工具的教程

    這篇文章主要介紹了用Python制作檢測(cè)Linux運(yùn)行信息的工具的教程,主要是用CPython讀取運(yùn)行系統(tǒng)的硬件參數(shù)、網(wǎng)絡(luò)傳輸流量統(tǒng)計(jì)等,需要的朋友可以參考下
    2015-04-04
  • Django框架視圖層URL映射與反向解析實(shí)例分析

    Django框架視圖層URL映射與反向解析實(shí)例分析

    這篇文章主要介紹了Django框架視圖層URL映射與反向解析,結(jié)合實(shí)例形式分析了Django框架普通url映射、命名URL參數(shù)映射、分布式URL映射、反向解析等相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • 給Python入門者的一些編程建議

    給Python入門者的一些編程建議

    這篇文章主要介紹了給Python入門者的一些編程建議,包括對(duì)集合初始化和GIL理解等一些需要注意的地方,需要的朋友可以參考下
    2015-06-06

最新評(píng)論