1

我使用Python 3.6.0与两个不同的参数数目(*参数)和参数的默认值功能?

考虑下面的代码:

def foo(a, b='default-value', *args): 
    print('first argument=' + a) 
    print('default-value argument=' + b) 
    print('rest of arguments: ') 
    for arg in args: 
     print(arg) 

以下函数调用:

foo('arg1','arg2','arg3','arg4') 

结果与:

first argument=arg1 
default-value argument=arg2 
rest of arguments: 
arg3 
arg4 

但我预期:

first argument=arg1 
default-value argument=default-value 
rest of arguments: 
arg2 
arg3 
arg4 

是否有可能创建一个可同时接收不同数量的参数,并在Python默认值参数的函数?我如何达到我期待的结果?

+0

鉴于你的逻辑......究竟如何你希望能够通过任何价值'B',如果你似乎希望它被忽略,因为它已经有一个值? – deceze

+0

我认为,在这种情况下,我只想把它传递明确,如:'FOO(“ARG1”,B =“东西”,“ARG2”,“ARG3”)' –

回答

1

的Python 3,你可以在函数定义*args后移至该关键字的说法,所以才有了positionals捕获由*args

def foo(a, *args, b='default-value'): 
    ... 

first argument=arg1 
default-value argument=default-value 
rest of arguments: 
arg2 
arg3 
arg4 
+0

感谢您的答复!如果我也想使用'** kwargs',我会如何处理这个问题?例如。下面的签名是不允许的:'def foo(a,* args,** kwargs,b ='default-value')' –

+0

@GrzegorzŚwirski一旦你有'kwargs'在那里,你不需要设置一个默认值为'b'。只要做到'kwargs.get(“B”,“默认值”)'在你的函数。 –

1

可以归档你通过把taht有defalt值作为最后存在params参数要

def foo(a, *args, b='default-value'): 
    print('first argument=' + a) 
    print('default-value argument=' + b) 
    print('rest of arguments: ') 
    for arg in args: 
     print(arg) 

foo('arg1','arg2','arg3','arg4') 

结果:

first argument=arg1 
default-value argument=default-value 
rest of arguments: 
arg2 
arg3 
arg4