簡體   English   中英

定義 function 時使用“任何”

[英]Using 'any' when defining a function

我知道標題可能無法准確說明我的要求,所以這里有一小段代碼應該解釋一下:

def echo(msg: any) -> None:
    print(str(msg))

由於“任何”是 function,我想問這樣的語法是否正確。 我知道我應該給出一個像'object'之類的類型,但我只想知道語法是否正常。

any作為 Python 內置的 any 是 function。 Any that should be used in annotations is typing.Any - 這是一個注釋標記,表示任何可能的 object。

通常:注釋標記應該用直出的類,或者通過typing庫組成的其他專門的對象。

我相信您打算將msg設為任何類型。 正確的代碼是:

from typing import Any

def echo(msg: Any) -> None:
    print(str(msg))

請參閱: https://docs.python.org/3/library/typing.html#typing.Any

一般來說,類型注釋應該使用內置typing庫中的類和對象,而不是像any那樣的函數。

語法真的很好。 類型注釋只希望您指定變量所屬的任何類型或 object。 因此,在您的情況下,它是一個有效的語法,一切都會正常工作,因為any也是如此。 它只是一個內置的 function。 如果您通過解釋器傳遞代碼並檢查注釋,那么一切都會按預期進行。

>>> import typing
>>>
>>> def echo(msg: any) -> None:
...     print(str(msg))
...
>>>
>>> echo.__annotations__
{'msg': <built-in function any>, 'return': None}
>>>

如您所料,這里的msg被假定為<built-in function any>類型。

但是,如果您使用 Python 類型檢查(如 mypy)通過相同的檢查,那么它會給您一個錯誤。 所以它是一個有效的 Python 語法,但對 Python 類型檢查器無效,因為它們不期望內置函數是有效類型。

是的,即使您不想問這個問題,正確的做法也是使用 typing.Any ,如下所示:

import typing

def echo(msg: typing.Any) -> None:
    print(str(msg))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM