課程
/后端開發
/Python
/python進階
之前的課程有將*args ?**kw的但是當時沒怎么理解這兩個到底是什么玩意,求誰能解釋一下吧?
2015-05-26
源自:python進階 4-4
正在回答
*args是非關鍵字參數,用于元組,**kw是關鍵字參數,用于字典
舉例:
1.*args def?tupleArgs(arg1,?arg2=?'B',?*arg3): ????print('arg?1:%s?'?%?arg1) ????print('arg?2:%s?'?%?arg2) ????for?eachArgNum?in?range(len(arg3)): ????????print('the?%d?in?arg?3?:%s?'?%?(eachArgNum,arg3[eachArgNum])) if?__name__?==?'__main__': ????tupleArgs('A')?????? ????#???arg?1:A? ????#???arg?2:B? ????tupleArgs('23','C') ????#???arg?1:23? ????#???arg?2:C ????tupleArgs('12','A','GF','L') ????#???arg?1:12? ????#???arg?2:A? ????#???the?0?in?arg?3?:GF? ????#???the?1?in?arg?3?:L? ???? ????**kw ???? ????def?dictArgs(kw1,?kw2=?'B',?**kw3): ????print('kw?1:%s?'?%?kw1) ????print('kw?2:%s?'?%?kw2) ????for?eachKw?in?kw3: ????????print('the?%s?---->:%s?'?%?(eachKw,kw3[eachKw])) if?__name__?==?'__main__': ????dictArgs('A') ????#???kw?1:A? ????#???kw?2:B? ????dictArgs('23','C') ????#???kw?1:23? ????#???kw?2:C? ????dictArgs('12','A',?c?=?'C',d?=?'12121212') ????#???kw?1:12? ????#???kw?2:A? ????#???the?d?---->:12121212? ????#???the?c?---->:C? ????dictArgs('kw',c?=?'C',d?=?'12121212',kw?=?'KW') ????#???kw?1:kw? ????#???kw?2:B? ????#???the?kw?---->:KW? ????#???the?d?---->:12121212? ????#???the?c?---->:C
qq_憶_4
D_punto 回復 qq_憶_4
def?log(f): ????def?fn(*args,?**kw): ????????print?'call?'?+?f.__name__?+?'()...' ????????return?f(*args,?**kw) ????return?fn
測試
謝謝,講解很到位
謝謝,例子很到位
謝謝,講的很清晰
講解不多,還是似懂非懂
代碼格式亂了,修正一下。
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)
先來看個例子:
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)輸出結果如下:
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'}?---------------------------------------
可以看到,這兩個是python中的可變參數。*args表示任何多個無名參數,它是一個tuple;**kwargs表示關鍵字參數,它是一個dict。并且同時使用*args和**kwargs時,必須*args參數列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )這樣調用的話,會提示語法錯誤“SyntaxError: non-keyword arg after keyword arg”。
?
呵呵,知道*args和**kwargs是什么了吧
慕瓜7221374
舉報
學習函數式、模塊和面向對象編程,掌握Python高級程序設計
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-06-01
*args是非關鍵字參數,用于元組,**kw是關鍵字參數,用于字典
舉例:
2019-04-20
測試
2018-08-22
謝謝,講解很到位
2018-07-03
謝謝,例子很到位
2017-10-20
謝謝,講的很清晰
2016-03-31
講解不多,還是似懂非懂
2015-08-22
代碼格式亂了,修正一下。
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)
2015-08-22
先來看個例子:
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)
輸出結果如下:
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'}?
---------------------------------------
可以看到,這兩個是python中的可變參數。*args表示任何多個無名參數,它是一個tuple;**kwargs表示關鍵字參數,它是一個dict。并且同時使用*args和**kwargs時,必須*args參數列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )這樣調用的話,會提示語法錯誤“SyntaxError: non-keyword arg after keyword arg”。
?
呵呵,知道*args和**kwargs是什么了吧