让我们说我们有这个代码..
def test(**test):
print test
def test2(test):
print test
test(test=1, asterisk=2)
t = {"test":1, "asterisk":2}
test2(t)
test和test2函数将打印出相同的结果。
使用**而不是传递字典有什么好处?
答案 0 :(得分:5)
如果我们看一下你的例子:
test(test=1, asterisk=2)
比
更具可读性t = {"test":1, "asterisk":2}
test2(t)
或
test2({"test":1, "asterisk":2})
因此,如果你有一个可以接受可变数量的可变命名参数的函数,那么这是最可读的方法。
它也是另一种方式:
def add(a, b):
return a + b
params = { "b": 5, "a": 6}
print(add(**params))
11
* args将为您提供可变数量的参数:
def min(*args):
min = None
for v in args:
if min is None or v < min:
min = v
return min
print(min(1, 7, 8, 9, 2, 1, 0))
0
这也是另一种方式:
def add(a, b):
return a + b
t = [5, 6]
print(add(*t))
11
在包装其他函数时使用它们,例如在创建函数装饰器时使用:
def log_call(f):
def logged(*args, **kwargs):
print("Called {}".format(f.__name__))
return f(*args, **kwargs)
return logged
class A:
@log_call
def add_two_numbers(self):
return 1 + 2
print(A().add_two_numbers())
名为add_two_numbers
3
答案 1 :(得分:1)
编写装饰器时非常重要。理想情况下,您希望装饰器处理具有不同参数的函数。
def mydecorator(func):
def new_func(*args, **kwargs):
#do something here...
return func(*args, **kwargs)
return new_func
答案 2 :(得分:0)
用于使用dict传递参数
让我们考虑一个方法
def foo(a=10,b=20):
return a+b
现在你可以传递像这样的参数
d={'a'=20,'b'=30}
print foo(**d)
使用**
Python动态地将值传递给相应的参数
output : 50
String Foramtting
coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
print 'Coordinates: {latitude}, {longitude}'.format(**coord)
output:'Coordinates: 37.24N, -115.81W'
答案 3 :(得分:0)
基本上,*返回元组中的值,**返回字典中的值。