【问题标题】:default values for variable argument list in PythonPython中变量参数列表的默认值
【发布时间】:2010-05-03 16:14:47
【问题描述】:

是否可以在 Python 3 中为变量参数列表设置默认值?

类似:

def do_it(*args=(2, 5, 21)):
     pass

我想知道变量参数列表的类型是tuple,但这里不接受元组。

【问题讨论】:

    标签: python function arguments


    【解决方案1】:

    如果不是语法上的,那么取决于你想要什么行为:

    def do_it(*args):
        if not args: args = (2, 5, 21)
    

    def do_it(a=2, b=5, c=21, *args):
        args = (a,b,c)+args
    

    应该这样做。

    【讨论】:

      【解决方案2】:

      初始化这样的列表通常不是一个好主意。

      默认值只计算一次。当默认值是可变对象(例如列表、字典或大多数类的实例)时,这会有所不同。例如,以下函数在后续调用中累积传递给它的参数

      def f(a, L=[]):
          L.append(a)
          return L
      
      print f(1)
      print f(2)
      rint f(3)
      

      这将打印出来

      [1]
      [1, 2]
      [1, 2, 3]
      

      我通常检查它是否传递了一些东西,如果没有,则在函数体中初始化它。

      【讨论】:

      • 如果元组中的对象是不可变的,那么 OP 的例子是安全的,因为元组本身也是不可变的。
      • 你说的太对了。我在考虑元组不是的可变对象。谢谢指正。
      猜你喜欢
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 2012-03-06
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2021-11-19
      相关资源
      最近更新 更多