为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

萧十郎 2021-09-28 16:10:59
我有以下一段代码。在这里,我想利用给 '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 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

执行此操作的“惯用”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=":)")

我不知道有什么方法可以实际选择不传递可选参数。如果您正在寻找实用的解决方案,这就是您要走的路。但是如果有一些更深层次的技巧可以让你完全绕过争论,我也会有兴趣看到它。



查看完整回答
反对 回复 2021-09-28
?
繁星coding

TA贡献1797条经验 获得超4个赞

该.__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


查看完整回答
反对 回复 2021-09-28
?
米脂

TA贡献1836条经验 获得超3个赞

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

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

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


查看完整回答
反对 回复 2021-09-28
  • 3 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信