使用类型提示时如何向函数添加默认参数?

新手上路,请多包涵

如果我有这样的功能:

 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

原文由 josh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 227
2 个回答

你的第二种方法是正确的。

 def foo(opts: dict = {}):
    pass

print(foo.__annotations__)

这输出

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

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

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

原文由 noɥʇʎԀʎzɐɹƆ 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你正在使用 打字(在 Python 3.5 中引入),你可以使用 typing.Optional ,其中 Optional[X] 等同于 Union[X, None] 它用于表示 None 的显式值是允许的。从 打字。可选:

 def foo(arg: Optional[int] = None) -> None:
    ...

原文由 Tomasz Bartkowiak 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题