Python func(*元组)和#x27;散布';元组,但func(**字典)是如何工作的?
让我们创建一个简单的元组、字典和函数Python func(*元组)和#x27;散布';元组,但func(**字典)是如何工作的?,python,dictionary,args,keyword-argument,Python,Dictionary,Args,Keyword Argument,让我们创建一个简单的元组、字典和函数 >>> tup = (7, 3) >>> dic = {"kw1":7, "kw2":3} >>> def pr(a, b): ... print a, b 下面显示了*在元组和字典作为参数之前所做的操作 >>> pr(tup) Traceback (most recent call last): File "<stdin>", line 1, in <mo
>>> tup = (7, 3)
>>> dic = {"kw1":7, "kw2":3}
>>> def pr(a, b):
... print a, b
下面显示了*
在元组和字典作为参数之前所做的操作
>>> pr(tup)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pr() takes exactly 2 arguments (1 given)
>>> pr(*tup)
7 3
>>> pr(*dic)
kw1 kw2
好吧,似乎**只在字典用作参数时才起作用。那我们就用字典试试吧
>>> pr(**dic)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pr() got an unexpected keyword argument 'kw1'
公共关系(**dic)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:pr()获得意外的关键字参数“kw1”
什么?
有人能给我举一个不产生错误的最后一个例子吗?dict表示法意味着你的字典变成了关键字参数。如果函数没有必要的关键字,那么它将返回一个错误,正如您所经历的那样 在您的情况下,如果您按照以下方式定义函数,则它将起作用:
>>> def pr(kw1, kw2):
... print kw1, kw2
您的
pr
函数采用参数a
和b
,而不是kw1
和kw2
>>> def pr(a, b):
... print a, b
...
>>>
>>> d = {'a': 1, 'b':2}
>>> pr(**d)
1 2
要添加到其他答案中,可以在函数定义中使用
*args
和**kwargs
来支持任意参数。这可能会使代码不那么明确。但出于调试目的、灵活性和开发速度,采用以下方法可能有意义:
(函数定义中的*
/***
-符号类似于函数调用时参数解包操作的“逆”操作。)
文档的一些相关链接:
>>> def pr(a, b):
... print a, b
...
>>>
>>> d = {'a': 1, 'b':2}
>>> pr(**d)
1 2
def foo(*args, **kwargs):
for v in args:
print v
for v in kwargs:
print v, "->", kwargs[v]
dic = {"kw1":7, "kw2":3}
foo(dic)
# prints:
# {'kw1': 7, 'kw2': 3}
foo(**dic)
# prints:
# kw1 -> 7
# kw2 -> 3