[英]Is there any benefits for using * or ** in 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函數將打印出相同的結果。
與通過字典相比,使用**有什么好處?
如果我們看一下您的示例:
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
編寫裝飾器時,這非常重要。 理想情況下,您希望裝飾器處理帶有不同參數的函數。
def mydecorator(func):
def new_func(*args, **kwargs):
#do something here...
return func(*args, **kwargs)
return new_func
用於通過dict傳遞參數
讓我們考慮一種方法
def foo(a=10,b=20):
return a+b
現在您可以像這樣傳遞參數
d={'a'=20,'b'=30}
print foo(**d)
使用**
Python將值動態傳遞給各自的參數
output : 50
琴弦打孔
coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
print 'Coordinates: {latitude}, {longitude}'.format(**coord)
output:'Coordinates: 37.24N, -115.81W'
基本上,*返回元組的值,**返回字典中的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.