python args kw_Python基础-参数魔法,*args,**kwags
最近在帶著新成員一起學(xué)習(xí)《Python基礎(chǔ)教程》這本書,看到參數(shù)魔法的時(shí)候
突然感覺好多術(shù)語真的不知道呀~
Python參數(shù):位置參數(shù),關(guān)鍵字參數(shù)
經(jīng)常看Python我們肯定經(jīng)常看見,下面類似這樣的代碼
def add(x,y):
return x+y
# 1
add(1,2)
# 2
add(x=1,y=2)
上面的兩段代碼結(jié)果是一樣,但是含義卻不一樣
第一種叫做位置參數(shù):即,add函數(shù)根據(jù)調(diào)用時(shí)參數(shù)傳進(jìn)來時(shí)候的位置來確定誰是x,誰是y
第二種叫做關(guān)鍵字參數(shù):即,add函數(shù)根據(jù)調(diào)用時(shí)指定的參數(shù)對應(yīng)值來確定x,y;這時(shí)也可以寫成add(y=2,x=1)
兩種方法各有自己的用途
Python收集參數(shù)
我們都應(yīng)該知道在Python3(2不支持)在解壓可迭代對象是有星號表達(dá)式
進(jìn)行多個(gè)元素的不確定解包
然后收集參數(shù)是什么呢?如名字所示,就是當(dāng)參數(shù)個(gè)數(shù)不定時(shí),我們函數(shù)的定義,類似收集的方式,滿足不定長參數(shù)需求
這里就也用到了星號*,不過星號表達(dá)式在解壓可迭代對象時(shí)生成的是個(gè)列表,收集參數(shù)則要看星號的數(shù)量來決定類型
下段代碼運(yùn)行所示:
_, *b, _ = ["hello", "world", "test", "ddd"]
print(b)
def test(*parameter1, **parameter2):
print('parameter1=', parameter1)
print('parameter2=', parameter2)
test("hello", "world", fo="a", ss="b")
如圖片所示,
收集參數(shù)中使用一個(gè)星號,即“*”,會(huì)對調(diào)用時(shí)導(dǎo)入的位置參數(shù)進(jìn)行‘收集’轉(zhuǎn)為元祖
收集參數(shù)中使用兩個(gè)星號,即“**”,會(huì)對調(diào)用時(shí)導(dǎo)入的關(guān)鍵字參數(shù)進(jìn)行“收集”轉(zhuǎn)換為字典
此時(shí)你可能已經(jīng)聯(lián)想到了經(jīng)常遇到的 args,*kwargs,后面會(huì)提到
“收集參數(shù)“反轉(zhuǎn)
上面提到了收集參數(shù),針對函數(shù)定義在參數(shù)位置利用*來進(jìn)行不定參數(shù)的收集
同時(shí),我們也可以利用類似的‘逆運(yùn)算’,進(jìn)行代碼編寫
如下面代碼:
test1 = ("hello", "world")
def test(parameter1, parameter2):
print("1.", parameter1,)
print("2.", parameter2)
test(*test1)
args,*kwargs
如上面收集參數(shù)所示,在Python中只是習(xí)慣默認(rèn)定義args為位置參數(shù)收集參數(shù)
*kwargs為關(guān)鍵字參數(shù)收集參數(shù)
他們之間的區(qū)別也如上所示,我們什么時(shí)候會(huì)用到他們呢?
子類化
class Foo(object):
def __init__(self, value1, value2):
# do something with the values
print value1, value2
class MyFoo(Foo):
def __init__(self, *args, **kwargs):
# do something else, don't care about the args
print 'myfoo'
super(MyFoo, self).__init__(*args, **kwargs)
裝飾器
def mydecorator( f ):
@functools.wraps( f )
def wrapper( *args, **kwargs ):
print "Calling f", args, kwargs
v = f( *args, **kwargs )
print "f returned", v
return v
return wrapper
PS:
注意收集參數(shù)順序,位置參數(shù)必須在關(guān)鍵字參數(shù)之前
也就是說,args和**kwargs同時(shí)出現(xiàn)時(shí),args必須位于前面
總結(jié)
以上是生活随笔為你收集整理的python args kw_Python基础-参数魔法,*args,**kwags的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画多边形_python –
- 下一篇: webstorm两个文件比对_webst