「每天3分钟学Python」*args, **kwargs 到底是啥玩意?

01

Python语言是动态解释型的,是一门粘性语言。今天来讨论一个Python很好玩的两个参数:*args, **kwargs,它们会出现在函数的形参位置。那么,它们本质是什么? 怎么用它们?使用它们有哪些注意事项?

02

*args 和 **kwargs

*args 本质是一个tuple,**kwargs本质是一个dict.

03

怎么用 *args 和 **kwargs

def my_fun(*args, **kwargs ):

print 'args = ', args

print 'kwargs = ', kwargs

调用就比较有意思了,传统的比如,c, c++, Java, C#,基本都是一对一传参,但是python靠这两个参数,可以实现多参的灵活传入。如下所示,我完全可以这么调用:

my_fun(1,3,5,9, a=2, b=4)

这样打印的结果:

args = (1,3,5,9) # 是一个tuple

kwargs = { 'a': 2 , 'b':4 } #是一个字典

04

使用 *args 和 **kwargs 的注意事项

上述函数 my_fun,如果这么调用就会有问题:

my_fun( a=2, b=4, 1,3,5,9 )

SyntaxError: non-keyword arg after keyword arg”

意思是:关键字参数后面不能有非关键字参数,言外之意,关键字参数 ** kwargs 必须位于 *args 之后!!!


分享到:


相關文章: