当前位置: 首页 > 知识库问答 >
问题:

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

百里杰
2023-03-14

如果我有这样一个函数:

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

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

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

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

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

我在键入文档中或在Google搜索中找不到任何东西。

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

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

共有1个答案

郑承恩
2023-03-14

你的第二条路是正确的。

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

print(foo.__annotations__)

这一产出

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

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

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

 类似资料:
  • 问题内容: 如果我有这样的功能: 我想在参数中添加类型提示,该怎么做?我假设的方式给了我一个语法错误: 以下代码不会引发语法错误,但似乎不是处理这种情况的直观方法: 我在文档或Google搜索中找不到任何内容。 编辑:我不知道默认参数如何在Python中工作,但出于这个问题,我将保留上面的示例。通常,最好执行以下操作: 问题答案: 您的第二种方法是正确的。 这个输出 的确,它没有在PEP 484中

  • 问题内容: 我对PHP函数的默认值感到困惑。说我有一个这样的功能: 如果我想为$ x使用默认参数并为$ y设置不同的参数怎么办? 我一直在尝试不同的方法,但我变得更加困惑。例如,我尝试了以下两种方法: 但是这两个都不会为$ x产生适当的默认参数。我也试图通过变量名来设置它。 我完全希望这样的事情能奏效。但这根本不符合我的预期。似乎不管我做什么,每次调用该函数时,无论如何我都必须最终键入默认参数。而

  • 我已经在我的项目中添加了用于硒测试的chromedriver选项,但我不明白边缘驱动程序的适当方法。我已经尝试了所有的可能性。有人可以帮助我吗?谢谢。 它在chromeOptions上运行良好,但我不明白如何为edge options编写。 对于edge选项,因为没有addArguments函数,所以我尝试了setCapability,并最终与DesiredCapabilities合并,但它不起作

  • 问题内容: 我想在当前的Python 3.5项目中使用类型提示。我的函数应该接收一个函数作为参数。 如何在类型提示中指定类型函数? 我检查了PEP 483,但在那里找不到函数类型提示。 问题答案: 正如@jonrsharpe在评论中指出的,可以使用以下方法完成: 问题是,将其本身翻译为: 一个Callable接受 任意数量的/类型的 参数,并返回任何类型的值。在大多数情况下,这不是您想要的,因为您

  • 我有这种输入类型,我想为其中一个字段添加默认值。我想将 0 添加到示例输入中的值字段中。 有什么想法吗?

  • 标准中似乎没有规则提到模板参数需要默认参数的情况。 在dcl中。fct。默认值#1 如果在参数声明中指定了初始化子句,则将此初始化子句用作默认参数。缺省参数将用于缺少尾随参数的调用。 在本节中,规则明确描述了何时为函数调用提供默认参数。但是,我在标准中没有找到与上面描述何时提供默认参数作为模板参数的语句类似的引用。 例如