我想定义一个resize(h, w)
方法,我希望能够通过以下两种方式之一来调用它:
resize(x,y)
resize(x)
在第二次通话中,我希望y
等于x
。我可以在方法定义中执行此操作,还是应该执行resize(x,y=None)
之类的操作并检查内部:
if y is None:
y = x
答案 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
关键字。