在Python中使用类型提示添加默认参数值

Adding default parameter value with type hint in Python

如果我有这样的功能:

1
2
def foo(name, opts={}):
  pass

我想给参数添加类型提示,我该怎么做?我假设的方式给了我一个语法错误:

1
2
def foo(name: str, opts={}: dict) -> str:
  pass

以下内容不会引发语法错误,但似乎不像处理这种情况的直观方法:

1
2
def foo(name: str, opts: dict={}) -> str:
  pass

我在typing文档或谷歌搜索中找不到任何东西。

编辑:我不知道默认参数在Python中是如何工作的,但是为了这个问题,我将保留上面的例子。一般来说,最好做以下工作:

1
2
3
4
def foo(name: str, opts: dict=None) -> str:
  if not opts:
    opts={}
  pass


你的第二条路是对的。

1
2
3
4
def foo(opts: dict = {}):
    pass

print(foo.__annotations__)

此输出

1
{'opts': <class 'dict'>}

确实,它没有在PEP 484中列出,但是类型提示是函数注释的一个应用程序,在PEP 3107中有记录。语法部分清楚地表明关键字参数以这种方式与函数注释一起工作。

我强烈建议不要使用可变关键字参数。更多信息。


我最近看到了这一行:

1
2
3
def foo(name: str, opts: dict=None) -> str:
    opts = {} if not opts else opts
    pass