假设我有一个像这样的函数签名:
def any_foo(
bar: Bar,
with_baz: Optional[Baz] = None,
with_datetime: Optional[datetime] = None,
effective: Optional[bool] = False,
) -> Foo
我当然可以复制它的声明并摆弄它足以创建以下
TypedDict
:
AnyFooParameters = TypedDict(
"AnyFooParameters",
{
bar: Bar,
with_baz: Optional[Baz],
with_datetime: Optional[datetime],
effective: Optional[bool]
}
)
但这似乎是一个非常直接的转换,我想知道是否有一些简单的方法可以直接从函数创建这个
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
使用
any_foo.__annotations__
,你可以得到这个:
{'req_int': int,
'opt_float': typing.Optional[float],
'opt_str': typing.Optional[str],
'opt_bool': typing.Optional[bool],
'return': int}
注意您可以通过
return
键访问返回值的类型。
顺便说一句,由于
return
是保留关键字,因此您不能将参数命名为 return
,因此无需担心重复键:)