我觉得我必须有一些简单的东西在这里。 这就是我想要做的事情:
>>> def x(*args, a=False):
... print args, a
>>> x(1,2)
(1,2) False
>>> x(1,2,3, a=True)
(1,2,3) True
但是你不能定义这样的函数。
我知道这会有用,但看起来不太好:
>>> def x(*args, **kwargs):
... if 'a' in kwargs:
... a = kwargs['a']
... else
... a = False
... print args, a
最好的方法是什么?
我正在使用python 2.6
答案 0 :(得分:5)
我认为你拥有的是唯一的方式。但你可以写得更好:
def x(*args, **kwargs):
a = kwargs.get('a', False)
print args, a
x(1,2,3,a=42)
答案 1 :(得分:3)
刚刚找到这个http://www.python.org/dev/peps/pep-3102/
第一个变化是允许常规 在varargs之后出现的参数 参数:
def sortwords(*wordlist, case_sensitive=False): ...
此功能接受任意数量的 位置论证,它也 接受名为的关键字选项 'CASE_SENSITIVE'。
所以它将在Python 3中出现
答案 2 :(得分:0)
所有* args确实是一个变量参数列表,所有** kwargs实际上都是一个只有字典关键字的参数。
除非我误解,为什么不这样做?
def x(args, a=False):
print args, a
x((1,2),True) #<- just passes in a list instead of special list and dict
output
(1,2) True
x((1,2))
output
(1,2) False
如果没有变量*参数列表并且只检测** kwargs关键字参数dict,它可能不是pythonic但可能适合您的需要。
答案 3 :(得分:0)
您必须采取第二种选择,或者您必须重新排序参数,以便首先使用默认参数:
def x(a=False, *args):