问题:在Python中使用类型提示添加默认参数值
如果我有这样的功能:
def foo(name, opts={}):
pass
我想在参数中添加类型提示,该怎么办?我假设的方式给了我一个语法错误:
def foo(name: str, opts={}: dict) -> str:
pass
以下内容不会引发语法错误,但似乎不是处理这种情况的直观方法:
def foo(name: str, opts: dict={}) -> str:
pass
我在typing
文档或Google搜索中找不到任何内容。
编辑:我不知道默认参数如何在Python中工作,但出于这个问题,我将保留上面的示例。通常,最好执行以下操作:
def foo(name: str, opts: dict=None) -> str:
if not opts:
opts={}
pass
回答 0
您的第二种方法是正确的。
def foo(opts: dict = {}):
pass
print(foo.__annotations__)
这个输出
{'opts': <class 'dict'>}
的确没有在PEP 484中列出它,但是类型提示是函数注释的一种应用,在PEP 3107中进行了记录。语法部分明确指出,关键字参数以这种方式与函数注释一起使用。
我强烈建议您不要使用可变的关键字参数。更多信息在这里。
回答 1
如果您使用的是类型输入(在Python 3.5中引入),则可以使用typing.Optional
,其中Optional[X]
等于Union[X, None]
。它用于表示None
允许使用的显式值。从键入。可选:
def foo(arg: Optional[int] = None) -> None:
...
回答 2
我最近看到了这种单线:
def foo(name: str, opts: dict=None) -> str:
opts = {} if not opts else opts
pass