亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

python中*args **kw到底是什么意思?求指教!

之前的課程有將*args ?**kw的但是當時沒怎么理解這兩個到底是什么玩意,求誰能解釋一下吧?

正在回答

8 回答

*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


15 回復 有任何疑惑可以回復我~
#1

qq_憶_4

這些 是在哪找到的...
2015-08-11 回復 有任何疑惑可以回復我~
#2

D_punto 回復 qq_憶_4

Python 核心編程
2015-08-22 回復 有任何疑惑可以回復我~
def?log(f):
????def?fn(*args,?**kw):
????????print?'call?'?+?f.__name__?+?'()...'
????????return?f(*args,?**kw)
????return?fn

測試

0 回復 有任何疑惑可以回復我~

謝謝,講解很到位

0 回復 有任何疑惑可以回復我~

謝謝,例子很到位

0 回復 有任何疑惑可以回復我~

謝謝,講的很清晰

0 回復 有任何疑惑可以回復我~

講解不多,還是似懂非懂

0 回復 有任何疑惑可以回復我~

代碼格式亂了,修正一下。

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)

5 回復 有任何疑惑可以回復我~

先來看個例子:

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是什么了吧


29 回復 有任何疑惑可以回復我~
#1

慕瓜7221374

大神 能不能講解清楚一點 還是似懂非懂
2016-08-18 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

python中*args **kw到底是什么意思?求指教!

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號