l0b*_*0b0 9 python typing python-3.x
假设我有一个像这样的函数签名:
def any_foo(
bar: Bar,
with_baz: Optional[Baz] = None,
with_datetime: Optional[datetime] = None,
effective: Optional[bool] = False,
) -> Foo
Run Code Online (Sandbox Code Playgroud)
我当然可以复制它的声明并对其进行足够的修改以创建以下内容TypedDict:
AnyFooParameters = TypedDict(
"AnyFooParameters",
{
bar: Bar,
with_baz: Optional[Baz],
with_datetime: Optional[datetime],
effective: Optional[bool]
}
)
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个非常简单的转换,我想知道是否有一些简单的方法可以直接从函数创建这个TypedDict(或至少是对)。name: type
结果any_foo.__annotations__正是你想要的。例如:
from typing import Optional
def any_foo(
req_int: int,
opt_float: Optional[float] = None,
opt_str: Optional[str] = None,
opt_bool: Optional[bool] = False,
) -> int:
pass
Run Code Online (Sandbox Code Playgroud)
通过any_foo.__annotations__,您可以得到:
{'req_int': int,
'opt_float': typing.Optional[float],
'opt_str': typing.Optional[str],
'opt_bool': typing.Optional[bool],
'return': int}
Run Code Online (Sandbox Code Playgroud)
请注意,您可以通过键访问返回值的类型return。
顺便说一句,由于return是保留关键字,因此您无法命名参数,return因此无需担心重复键:)