2010-08-20 54 views

回答

22
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 
+0

没错。一旦函数被定义,默认参数就会被设置为石头。 – delnan 2010-08-20 19:54:53

+0

@delnan这是为什么不能像def(x = 2,y)那样在最后提供非默认设置参数的原因,而是必须将函数定义为“def(y,x = 2)”? – SIslam 2016-11-29 11:22:10

1

一种方法是这样的:

def foo(a, b, c=None): 
    c = a if c is None else c 
    # do something 
13

这个一般模式可能是最好的,最可读:

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 
+2

+1因提及'c = None'技巧无法工作,'None'不能成为'c'的有效状态。 – aaronasterling 2010-08-20 20:03:11

相关问题