如何在python中传递默认和可变长度参数?

Ank*_*kur 6 python arguments function python-2.7

我发现了许多关于python函数参数的查询,但仍然感到困惑.假设我想在某个函数中传递几个参数.

def anyFunc(name, age, sex = 'M', *cap_letters ):
    print "name ", name
    print "age ", age
    print "sex ", sex
    for s in cap_letters:
        print "capital letter: ", s
Run Code Online (Sandbox Code Playgroud)

name和age参数是位置参数.sex是默认参数,后跟可变长度的非关键字参数,这些参数很少是随机大写字母.所以,如果我跑了

anyFunc("Mona", 45, 'F', *('H', 'K', 'L'))
Run Code Online (Sandbox Code Playgroud)

它给了我完美的输出..

name  Mona
age  45
sex  F
capital letter:  H
capital letter:  K
capital letter:  L
Run Code Online (Sandbox Code Playgroud)

但是,如果我通过下面的参数,我想使用默认的性别值而不是传递它.输出并不像预期的那样.

anyFunc("John", 45, *('H', 'K', 'L'))

name  John
age  45
sex  H
capital letter:  K
capital letter:  L
Run Code Online (Sandbox Code Playgroud)

它应该采用性别的默认值,即"M".我也试图在最后通过性别论证,但它给了我语法错误.有没有办法实现我想要的?

Abd*_*auf 1

让性成为你功能中的**kwargs。在您的函数中,检查用户是否已将性别作为关键参数传递。如果用户没有传递任何内容,则继续使用默认的性别值。

你的函数将如下所示:

def anyFunc(name, age, *cap_letters,**sexKwarg): print "name ", name print "age ", age sex = sexKwarg.get('sex', 'M') print "sex ", sex for s in cap_letters: print "capital letter: ", s 用法: anyFunc("Mona", 45, *('H', 'K', 'L'), sex = 'F') anyFunc("Mona", 45, *('H', 'K', 'L')) ##use default sex

  • `kwargs` 是一个字典,因此迭代它来获取键的值是疯狂的。只需执行 `sex = kwargs.get('sex', 'M')` 即可。 (2认同)
  • 这样做的缺点是从函数签名中隐藏了“sex”参数。 (2认同)