如何根据以前的参数定义默认参数值?

时间:2017-05-17 12:43:31

标签: python python-3.x default-value

我想定义一个resize(h, w)方法,我希望能够通过以下两种方式之一来调用它:

  1. resize(x,y)
  2. resize(x)
  3. 在第二次通话中,我希望y等于x。我可以在方法定义中执行此操作,还是应该执行resize(x,y=None)之类的操作并检查内部:

    if y is None:
        y = x
    

2 个答案:

答案 0 :(得分:3)

  

我可以在方法定义

中执行此操作

没有。在方法定义期间,无法知道x在运行时可能具有的值。默认参数在定义时评估一次,无法保存y的动态值。

  

或者我应该做resize(x,y=None)之类的事情并在里面检查

准确。这是Python中常见的习语。

答案 1 :(得分:2)

要完成Jim的答案,在None作为参数值有效的情况下,您可以使用可变长度参数功能(位置和/或关键字)。位置使用示例:

def resize(x,*args):
    if args:
        if len(args)>1:
           raise Exception("Too many arguments")
        y = args[0]
    else:
        y = x

在该示例中,您必须传递x,但您可以传递0个或多个额外的位置参数。当然,您必须手动进行检查,否则会丢失y关键字。