繁体   English   中英

如何编写python函数来接受*参数和关键字参数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM