主頁(yè) > 知識(shí)庫(kù) > Python-typing: 類(lèi)型標(biāo)注與支持 Any類(lèi)型詳解

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

熱門(mén)標(biāo)簽:唐山智能外呼系統(tǒng)一般多少錢(qián) 騰訊外呼線路 公司電話機(jī)器人 哈爾濱ai外呼系統(tǒng)定制 白銀外呼系統(tǒng) 海南400電話如何申請(qǐng) 廣告地圖標(biāo)注app 陜西金融外呼系統(tǒng) 激戰(zhàn)2地圖標(biāo)注

Any docs

Any 是一種特殊的類(lèi)型。

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

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

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

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)類(lèi)型和靜態(tài)類(lèi)型的代碼時(shí),上述行為可以讓 Any 被用作 應(yīng)急出口 。

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

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

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

比如說(shuō):

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è)值可以類(lèi)型安全地兼容任何類(lèi)型。使用 Any 示意一個(gè)值地類(lèi)型是動(dòng)態(tài)定義的。

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

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

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

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

1.1. 類(lèi)型別名

型別名通過(guò)將類(lèi)型分配給別名來(lái)定義。在這個(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])

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

例如:

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 作為類(lèi)型提示是一種特殊情況,并且由 type(None) 取代。

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

您可能感興趣的文章:
  • Python3 類(lèi)型標(biāo)注支持操作
  • Python標(biāo)準(zhǔn)庫(kù)之typing的用法(類(lèi)型標(biāo)注)
  • 淺談怎么給Python添加類(lèi)型標(biāo)注

標(biāo)簽:益陽(yáng) 上海 鷹潭 黔西 黑龍江 常德 惠州 四川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python-typing: 類(lèi)型標(biāo)注與支持 Any類(lèi)型詳解》,本文關(guān)鍵詞  Python-typing,類(lèi)型,標(biāo)注,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python-typing: 類(lèi)型標(biāo)注與支持 Any類(lèi)型詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Python-typing: 類(lèi)型標(biāo)注與支持 Any類(lèi)型詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章