先來看一個(gè)例子:
代碼如下:
>>> def foo(*args, **kwargs):
print 'args =', args
print 'kwargs = ', kwargs
print '-----------------------'
>>> if __name__ == '__main__':
foo(1, 2, 3, 4)
foo(a=1, b=2, c=3)
foo(1,2,3,4, a=1, b=2, c=3)
foo('a', 1, None, a=1, b='2', c=3)
其輸出結(jié)果如下:
代碼如下:
args = (1, 2, 3, 4)
kwargs = {}
-----------------------
args = ()
kwargs = {'a': 1, 'c': 3, 'b': 2}
-----------------------
args = (1, 2, 3, 4)
kwargs = {'a': 1, 'c': 3, 'b': 2}
-----------------------
args = ('a', 1, None)
kwargs = {'a': 1, 'c': 3, 'b': '2'}
-----------------------
從以上例子可以看出,這兩個(gè)是python中的可變參數(shù)。*args表示任何多個(gè)無名參數(shù),它是一個(gè)tuple;**kwargs表示關(guān)鍵字參數(shù),它是一個(gè) dict。并且同時(shí)使用*args和**kwargs時(shí),*args參數(shù)列必須要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )這樣調(diào)用的話,會(huì)提示語法錯(cuò)誤“SyntaxError: non-keyword arg after keyword arg”。如同所示:
新聞熱點(diǎn)
疑難解答
圖片精選