python 里面 *和**不表示指针,但是却有着很神奇的作用
下面介绍一下**和*在列表取值和接收可变形参,压缩实参等的功能
1、智能匹配接收列表的多个元素
代码如下:
ll = [1,2,3,4,5,6,7,8]
first, *lest, end = ll
print(first)
print(lest)
print(end)
执行结果:
可以看到中间的列表元素被匹配出来了
再举一个例子:
ll = [1,2,3,4,5,6,7,8]
first, second, *lest, end = ll
print(lest)
2、*args接收函数参数转换为列表使用
代码如下:
def func(*args):
for i in args:
print(i)
func(2,3,5)
执行结果:
可以看出 :*arg使函数可以接收任意多个参数,将实参数转换为列表使用
3、*list将列表每个元素依次做实参传入函数
代码如下:
ll = [2,5,6]
def func(*args):
for i in args:
print(i)
func(*ll) # 相当于 func(2, 5, 5)
执行结果:
可以看出;列表被‘压缩’作为实参依次传入函数中
4、**kwarg接收实参作为字典使用
代码如下:
def func(**kwargs):
for i in kwargs.items():
print(i)
func(name='js', gender='man')
执行结果:
可以看出;参数被接收到函数内部作为参数字典使用
5、**dict将字典元素依次做指定实参
代码如下:
arg = {'name': 'js', 'gender': 'man'}
def func(name, gender):
print('this perpeo name and gender is ' + name+ ' ' + gender)
func(**arg)
可以看出:字典被’压缩’,依照键值对应的方式作为实参精准传入函数
6、同时拥有*args和**kwarg形参的函数
代码如下:
def func(*args, **kwargs):
print('args: ')
print(args)
print('kwargs :')
print(kwargs.items())
func(2,4,5,name='js',gender='man')
执行结果:
可以看出:没有指定位置的参数被*arg接收,指定位置的参数被**kwarg接收
最后看一个很动态的例子,总结一下*arg和**kwarg在传参和使用参数的综合使用
ll = [2,5,6]
arg = {'name': 'js', 'gender': 'man'}
def func(*args, **kwargs):
print('args: ')
print(args)
print('kwargs :')
print(kwargs.items())
func(*ll, **arg)
执行结果: