*运算符:把一个可迭代对象拆开作为函数的参数
拆包:
拆包就相当于把元组中的元素拆分成单个的元素。
>>> 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循环的形式好一点