...

Python中的解包*和**的使用

Python中***是两个非常有趣的操作符,*对应列表或元祖,**则对应字典,主要有以两类功能。

  1. 在函数参数或赋值中接受不确定数量的位置参数和关键字参数。

位置参数指按顺序传入的参数,如add(1,2,3), 关键字参数指以键值对传入的参数如add(a=1,b=2,c=3)

def  func(*args, **kwargs):
    print("args接收所有位置参数并得到一个元祖变量", type(args), args)
    print("kwargs接收所有的关键字参数并得到一个字典", type(kwargs), kwargs)

func(1, 2, 3, a=4, b=5, c=6)

在函数中使用*args和**kwargs可以使得函数可以接受任意数量的位置参数和关键词参数。

  1. 在变量赋值中*同样可用于保留或抛弃任意数量的参数,示例如下
a, *_, c = [1,2, 3,4,5,6]
print(a, c)
print(_, type(_))

_也算一个变量,一般我不需要使用的变量可用_表示,*_则可以接收第一个和最后一个之外的任意多个变量,结果是个元祖。
3. 列表元祖和字典拆包
如果我们定义l = [1,2,3]那么l1个列表变量,如果我们需要里面的3个值1,2,3,就可以使用*l将其拆开。

  • l: 1个变量, 列表变量
  • *l:3个值
    如我们有个函数如下:
def add(a,b,c):
      print(a+b+c)

怎么样能把l中的3个数据不通过索引直接传入函数呢?就可以想下面一样解包直接传入

l = [1,2,3]
def add(a,b,c):
      print(a+b+c)

add(*l)  # *l 就相当于add(1,2,3)

字典的拆包使用**,即把一个字典变量拆成多个键值对,示例如下。

data = {"a": 1, "b": 2, "c": 3}
def add(a,b,c):
      print(a+b+c)

add(**data)  # 相当于add(a=1,b=2,c=3)
posted @ 2020-10-18 23:21  韩志超  阅读(556)  评论(0编辑  收藏  举报