当前位置: 首页 > 面试题库 >

函数中的可选参数及其可变的默认值[重复]

白通
2023-03-14
问题内容

这个问题已经在这里有了答案

9年前关闭。

可能重复:
Python中的“最少惊讶”:可变默认参数

我对可选参数在Python函数/方法中的工作方式感到困惑。

我有以下代码块:

>>> def F(a, b=[]):
...     b.append(a)
...     return b
...
>>> F(0)
[0]
>>> F(1)
[0, 1]
>>>

为什么F(1)返回[0, 1]却不返回[1]

我的意思是, 内部正在发生什么


问题答案:

几年前PyCon的优秀文档-解释了默认参数值。但基本上,由于列表是可变对象,并且关键字参数是在函数定义时评估的,因此每次调用该函数时,您都会获得相同的默认值。

正确的方法是:

def F(a, b=None):
    if b is None:
        b = []
    b.append(a)
    return b


 类似资料:
  • 当我将firstThing(第一件事)设置为default(默认值)时,如果没有默认值nil(默认值),这将起作用,我会得到一个错误,即调用函数时缺少参数。 通过键入Int 我认为它使它成为可选的,默认值为零,对吗?如果是这样,为什么没有=nil它就不能工作?

  • 问题内容: 是否可以为可选的通用参数提供默认值? 我正在尝试做这样的事情: 但我说错了 这只是我试图做的不可能的事吗? 问题答案: 用您完成的方式是不可能的。仅考虑上述代码,什么是类型?就像它说的那样,编译器无法弄清楚(我也不能,因为数据不存在,我也不能。) 特定问题的解决方案是重载而不是使用默认值: 但这引发了您在这里做什么的问题。您会认为应该如此。否则,您在做什么?如果不诉诸(您应该强烈避免)

  • 问题内容: 假设我有一个带两个参数的python函数,但我希望第二个arg是可选的,默认值是作为第一个参数传递的参数。所以,我想做这样的事情: 除非那行不通。我能想到的唯一解决方法是: 有一个更好的方法吗? 问题答案: 正如@Ignacio所说,您不能这样做。在后面的示例中,您可能会遇到的有效值。在这种情况下,您可以使用前哨值:

  • 对于一些函数,你可能希望它的一些参数是 可选 的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值。这个功能借助于默认参数值完成。你可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。 注意,默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的——这会在后面的章节中做详细解释。从现在开始,请记住这一点。 使用默认参数值 例7.5 使用默认参数值 #!

  • 问题内容: 这个问题已经在这里有了答案 : 有没有办法将默认参数设置为等于另一个参数值? (4个答案) 5年前关闭。 是否可以在同一函数定义中将函数参数的默认值定义为另一个参数?就像是: 但这没用。 问题答案: 不可以。Python解释器认为要说法的默认值分配到一个全局变量时,没有一个全局变量。 您可能想要尝试这样的事情:

  • Scala 函数 Scala 可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。实例如下: object Test { def main(args: Array[String]) { println( "返回值 : " + addInt() ); } def

  • 默认情况下,还可以为函数参数指定值。 但是,这些参数也可以显式传递值。 语法 (Syntax) function_name(param1,{param2= default_value}) { //...... } 例子 (Example) void main() { test_param(123); } void test_param(n1,{s1:12}) {

  • 问题内容: 长时间修改Python的任何人都被以下问题咬伤(或弄成碎片): Python新手希望此函数始终返回仅包含一个元素的列表[5]。结果是非常不同的,并且非常令人惊讶(对于新手而言): 我的一位经理曾经第一次遇到此功能,因此称其为“严重的设计缺陷”。我回答说,这种行为有一个基本的解释,如果您不了解内部原理,那确实是非常令人困惑和意外的。但是,我无法(对自己)回答以下问题:在函数定义而不是函数