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

How to define default argument value based on previous arguments?

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

  1. resize(x,y)
  2. resize(x)

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

if y is None:
    y = x

Can I do this in the method definition

没有。在方法定义期间,无法知道 x 在 运行 时可能有什么值。默认参数在定义时计算一次,无法为 y.

保存动态值

or should I do something like resize(x,y=None) and check inside

没错。这是Python.

中的常用成语

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

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

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