如果我有这样的功能:
def foo(name, opts={}):
pass
我想在参数中添加类型提示,我该怎么做?我假设的方式给了我一个语法错误:
def foo(name: str, opts={}: dict) -> str:
pass
以下内容并未引发语法错误,但它似乎不是处理此案例的直观方式:
def foo(name: str, opts: dict={}) -> str:
pass
我无法在typing
documentation或Google搜索中找到任何内容。
编辑:我不知道默认参数在Python中是如何工作的,但是为了这个问题,我将保留上面的例子。一般来说,执行以下操作要好得多:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
答案 0 :(得分:138)
你的第二种方式是正确的。
def foo(opts: dict = {}):
pass
print(foo.__annotations__)
此输出
{'opts': <class 'dict'>}
它确实没有在PEP 484中列出,但类型提示是功能注释的应用,在PEP 3107中有记录。The syntax section清楚地表明关键字参数以这种方式与函数注释一起使用。
我强烈反对使用可变关键字参数。更多信息here。
答案 1 :(得分:2)
我最近看到了这种单线纸:
def foo(name: str, opts: dict=None) -> str:
opts = {} if not opts else opts
pass
答案 2 :(得分:2)
如果您使用的是typing(在Python 3.5中引入),则可以使用typing.Optional
,其中Optional[X]
等效于Union[X, None]
。它用于表示允许None
的显式值。来自typing.Optional:
def foo(arg: Optional[int] = None) -> None:
...