利用python中的*操作符拆包和赋值可迭代对象

*运算符:把一个可迭代对象拆开作为函数的参数

拆包:
拆包就相当于把元组中的元素拆分成单个的元素。

>>> t=(20,8)  # t是一个元组
>>> divmod(*t)  # *t是对元组进行拆包,传参的时候我们希望传两个单元素进去,而不是一个元组
(2, 4)
>>> print(*t)  # 拆包之后的输出  
20 8
def run(a,*args):  # args是一个元组,保存了剩余参数。要写成 a,*args才能形式上对应 1,2,3
    print(a)
    print(args)  #  (2,3)

    print("对args拆包")
    print(*args) #  2 3
    print("将未拆包的数据传给run1")
    run1(args)  #相当于传递了一个元组
    print("将拆包后的数据传给run1")
    run1(*args)  # =run1(2,3)
 
def run1(*args):
    print("输出元组")
    print(args)
    print("对元组进行拆包")
    print(*args)
 
run(1,2,3) #后面的2和3
--------------------- 
作者:AlgoLin 
来源:CSDN 
原文:https://blog.csdn.net/kobebryantlin0/article/details/73864848 
版权声明:本文为博主原创文章,转载请附上博文链接!

注意*可以拆包所有可迭代对象(双下iter方法),如字符串等(序列数据)
事实上dict也可以用星号拆包,但只会有键。
平行赋值:是把一个可迭代对象里的元素,一并赋值到对应的变量组成的元组中,比如

>>> one,two="12"
>>> one,two
('1', '2')

前提要求是接受元组的嵌套结构符合表达式本身的嵌套结构([],()代表的嵌套结构是一致的)

_占位符:占据一个位置。
同时*也拓展到占位符:获取不确定数量的参数

有一个在赋值中很容易混淆的例子,一个只有单键值对的函数

>>> a.items()
dict_items([('a', 1)])

可以通过

(b,c), = a.items() 来拆包
(b,c),会被解释器认为是((b,c),),从而和[('a',1)]的嵌套结构一致
这里如果不加逗号会报错。这可能是因为逗号分隔的b,c被认为是第一个层次上的,单个b或者c就能代表[[1,2]]中的[1,2]

不过这样写容易混淆,还是写成for循环的形式好一点

你可能感兴趣的:(利用python中的*操作符拆包和赋值可迭代对象)