在python中使用*或**有什么好处吗?

时间:2015-04-16 04:22:21

标签: python

让我们说我们有这个代码..

def test(**test):
    print test
def test2(test):
    print test

test(test=1, asterisk=2)
t = {"test":1, "asterisk":2}
test2(t)

test和test2函数将打印出相同的结果。

使用**而不是传递字典有什么好处?

4 个答案:

答案 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)

基本上,*返回元组中的值,**返回字典中的值。