如何根据先前的参数定义默认参数值?
How to define default argument value based on previous arguments?
我想定义一个 resize(h, w)
方法,我希望能够通过以下两种方式之一调用它:
resize(x,y)
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
关键字。
我想定义一个 resize(h, w)
方法,我希望能够通过以下两种方式之一调用它:
resize(x,y)
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
关键字。