python中的*args和**kwargs

一开始我还挺困惑的,学习了下,感觉还是很实用的,好来学习下。

*args

args是arguments的缩写,是参数的意思,就表示多个,args可以说是多个参数的意思,当然可以没有,专业点儿就可变参数,通常用在函数定义的时候

def hi(your_name):
    print('hi,',your_name)

hi('lufei')

上面这个hi函数,就是接收一个参数,然后输出一句话,假设,我现在想要传多个名字,我也不知道有几个,都输出这样一句话,也就是说,参数是变化的,咋搞呢?

args就来了,args在Python中就表示可变参数,我们来用下

def hi(*args):
    for s in args:
        print('hi,',s)

hi('lufei','namei','世界')

是不是很有意思

这个*号,会将我们的参数放到一个元组当中

def hi(*args):
    print(args)
    print(type(args))

hi('lufei','namei','世界')

上面说的是函数定义中的使用,在函数调用的时候,也是可以用*号的,这个场景感觉应该不会太多,这里简单看下

def hi(s1,s2,s3):
    print(s1,s2,s3)

a=('lufei', 'namei', '世界')
hi(*a)

也就是说,这个*号,自动将我们的元组拆解,调用的时候是拆解,定义的时候是组装,我记得Java里有个自动装箱拆解的特性,不知道是不是同样的原理和概念

**kwargs

在理解了*args之后,这个kwargs道理是一样的
kwargs表示keyword arguments,这个是键值对,也就是参数名和参数值一起传入的

def say(**kwargs):
    for k,v in kwargs.items():
        print(k,'=',v)

say(name='lufei',age=13)

至于原理差不多,也是做了一个自动组装,变成了字典


在函数调用的时候,可以用来拆包


需要注意的是,如果args和kwargs一起使用,args一定要在**kwargs前面

你可能感兴趣的:(python中的*args和**kwargs)