[英]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.