在具有可变参数的函数中使用默认参数。这可能吗?

时间:2018-12-29 06:20:25

标签: python

我有以下代码。在此,我想利用为'a'提供的可选参数;即“ 5”,而不是“ 1”。如何使元组“数字”包含的第一个元素为1而不是2?

def fun_varargs(a=5, *numbers, **dict):
    print("Value of a is",a)
    for i in numbers:
        print("Value of i is",i)
    for i, j in dict.items():
        print("The value of i and j are:",i,j)

fun_varargs(1,2,3,4,5,6,7,8,9,10,Jack=111,John=222,Tom=333)

3 个答案:

答案 0 :(得分:4)

“惯用的” Python方法是将可选参数默认设置为None

def fun_varargs(a=None, *numbers, **dict):
  if a is None:
    a = 5
  ...

然后,您可以明确选择不通过。

fun_varargs(None, 1, 2, 3, 4, 5, some_keyword_arg=":)")

我不知道实际上选择不传递可选参数的方法。如果您正在寻找一个实用的解决方案,这就是方法。但是,如果有更深层次的黑客技术可以让您完全绕开该论点,那么我也有兴趣看到它。

答案 1 :(得分:3)

window.onafterprint = function(){ window.close() } 属性在元组中提供默认参数。您可以在这里使用它。

.__defaults__

答案 2 :(得分:0)

一种选择是将a后的*numbers

def fun_varargs(*numbers, a=5, **dict):
    ...

但是,您不能再将其用作位置参数。 fun_varargs(42)不会将a设置为42。您只能使用关键字参数,即a来定义fun_varargs(a=42)