考虑以下函数,该函数在Python中不起作用,但我将用它来解释我需要做的事情。将函数输入的默认值设置为等于Python中的另一个输入
def exampleFunction(a, b, c = a):
...function body...
这就是我要分配给变量c
相同值的变量a
将采取,除非指定其他值。上面的代码在python中不起作用。有没有办法做到这一点?
谢谢。
考虑以下函数,该函数在Python中不起作用,但我将用它来解释我需要做的事情。将函数输入的默认值设置为等于Python中的另一个输入
def exampleFunction(a, b, c = a):
...function body...
这就是我要分配给变量c
相同值的变量a
将采取,除非指定其他值。上面的代码在python中不起作用。有没有办法做到这一点?
谢谢。
def exampleFunction(a, b, c = None):
if c is None:
c = a
...function body...
为关键字参数不能是一个变量(如果它是,它的转换成时该函数定义的固定值。)通常使用的将参数传递到主功能的默认值:
def main(argv=None):
if argv is None:
argv = sys.argv
一种方法是这样的:
def foo(a, b, c=None):
c = a if c is None else c
# do something
这个一般模式可能是最好的,最可读:
def exampleFunction(a, b, c = None):
if c is None:
c = a
...
您必须要小心,None
不是c
的有效状态。
如果你想支持“无”的值,你可以做这样的事情:
def example(a, b, *args, **kwargs):
if 'c' in kwargs:
c = kwargs['c']
elif len(args) > 0:
c = args[0]
else:
c = a
+1因提及'c = None'技巧无法工作,'None'不能成为'c'的有效状态。 – aaronasterling 2010-08-20 20:03:11
没错。一旦函数被定义,默认参数就会被设置为石头。 – delnan 2010-08-20 19:54:53
@delnan这是为什么不能像def(x = 2,y)那样在最后提供非默认设置参数的原因,而是必须将函数定义为“def(y,x = 2)”? – SIslam 2016-11-29 11:22:10