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

2024-10-03 13:24:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码。在这种情况下,我想使用给'a'的可选参数,即'5',而不是'1'。如何使元组“numbers”包含的第一个元素是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)

Tags: of代码in元素for参数isvalue
3条回答

一种选择是在*numbers之后移动a

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

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

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=":)")

我不知道如何选择不传递可选参数。如果你在寻找一个切实可行的解决方案,这是一条路。但如果有更深层次的黑客让你完全绕过这个论点,我也有兴趣看看。你知道吗

.__defaults__属性提供元组中的默认参数。你可以在这里用这个。你知道吗

>>> 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(fun_varargs.__defaults__[0],1,2,3,4,5,6,7,8,9,10,Jack=111,John=222,Tom=333)
value of a is 5
value of i is 1
value of i is 2
value of i is 3
value of i is 4
value of i is 5
value of i is 6
value of i is 7
value of i is 8
value of i is 9
value of i is 10
The value of i and j are: Jack 111
The value of i and j are: John 222
The value of i and j are: Tom 333

相关问题 更多 >