python中的解包操作

在看别人写的python代码的时候,有时候会看到在变量前面加上一个*或者是**,上网找了一下相关的资料发现这些星号原来是python中的解包操作,相当于将一个容器中的元素取出来然后分配给不同的变量,下面是我看别人写的博客自己的一些理解:

(1) 一个星号解包

① 解包可以使用在多个变量赋值或者是函数调用中,并且任何可迭代的对象都支持解包,其中包括列表/字符串/元组/字典/集合等这些常见的可迭代对象

a, b = 1, 2
a, b = b, a
print(a, b)

# 任何可迭代的对象都可以解包, 可迭代对象包括元组/字典/集合/列表
a, b, c = (1, 2, 3)
print(a, b, c)

a, b, c = "456"
print(a, b, c)

a, b, c = {7, 8, 9}
print(a, b, c)

# 字典解包之后只会留下key, 而value就会被丢掉了
a, b, c = {"a":1, "b":2, "c":3}
print(a, b, c)

 ② 在解包的过程遇到左边的变量个数小于右边可迭代的变量个数的时候会先分配那些没有带*号的, 最后剩余的元素分配给带星号的变量, 而且这个*是可以放在任意位置的

a, b, *c = [1, 2, 3, 4]
print(a, b, c)

a, *b, c = [1, 2, 3, 4]
print(a, b, c)

 ③ 调用函数时时候解包传递参数

def unpack_fun(a, b, c):
    print(a, b, c)

if __name__ == '__main__':
    unpack_fun(*[1, 2, 3])

解包使用在表达式中可以用来合并两个不同类型的可迭代参数,简化操作

list1 = [1, 2, 3]
list2 = range(3, 8)
# 解包操作合并两个列表
list = [*list1, *list2]
print(list)

(2) 两个**解包

两个**号的解包是使用在字典中的,比如合并两个字典,在函数调用时候通过解包传递字典类型参数

def dic_fun(name, password):
    print(name)
    print(password)


if __name__ == '__main__':
    # 下面属于字典的解包操作我们可以使用两个**这样就可以将字典解包成key=value的形式
    dic = {"name": "zhaozhao", "password": "123456"}
    dic_fun(**dic)

    # 合并两个字典也可以使用解包操作
    dic1 = {"a": 1, "b": 2, "c": 3, "d": 4}
    dic2 = {"e": 5, "f": 6, "g": 7, "h": 8}
    dic = {**dic1, **dic2}
    print(dic)

总结:本质上是将可迭代对象的元素取出来分配给其他的变量

  • 12
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值