为了账号安全,请及时绑定邮箱和手机立即绑定

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进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信