[英]How can I write a python function to accept *arguments and a keyword argument?
我觉得我必须有一些简单的东西在这里。 这就是我想要做的事情:
>>> 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
我认为你拥有的是唯一的方式。 但你可以写得更好:
def x(*args, **kwargs):
a = kwargs.get('a', False)
print args, a
x(1,2,3,a=42)
刚刚找到这个http://www.python.org/dev/peps/pep-3102/
第一个更改是允许在varargs参数后出现常规参数:
def sortwords(*wordlist, case_sensitive=False): ...
此函数接受任意数量的位置参数,并且还接受名为“case_sensitive”的关键字选项。
所以它将在Python 3中出现
好吧,所有* 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那样。
您必须采取第二个选择,或者您必须重新排序参数,以便首先使用默认参数:
def x(a=False, *args):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.