赋值trick
本文引用至:赋值trick
python 让世人震惊的就是他的灵活, 他的灵活不仅表现在他各种各样的包, 更表现在他深层次的语法当中.
比如, 赋值魔法就是一个很nice的trick.
sequence unpacking
序列解包, 在py中,用途真的很广.
当在等号一边使用多个值时, 会默认将值转化为元组:
>>> tup = 1,2,3,>>> tup(1, 2, 3)
如果你两边都对应相同的值的话, 就会发生sequence unpacking. 意思就是,再将元组给拆分开, 进行赋值.
>>> a,b,c = 1,2,3>>> print('''... a is {0}... b is {1}... c is {2}'''.format(a,b,c)) a is 1 b is 2 c is 3
另外, 还可以进行元组的嵌套. 比如:
>>> (a,b),c = (1,2),3// 结果和上面一致
该种赋值叫做序列解包, 序列有两种,一种为tuple 一种为list. 那list能不能行呢?
试一试
>>> a,b = [1,2]
没有报错, 说明对于list而言,这种赋值也是可行的.
另外, 在python3.x中,还提出一种extended unpacking(拓展解包).
他的作用就是使用*来收集剩下的内容,并且转换为list. 因为上面的序列解包, 等号两边必须顺序都是对应的. 所以, 如果你只想获得前两个, 那么拓展解包就很合适了.
>>> *a,b = 1,2// a:[1], b:2
不过,这里需要注意下面
- 你不能单独使用: 比如>>> a = 1,2 这是会报错的. 因为解包的要求,两边必须是元组,你进行单个赋值,这样的结果估计就go die了.
所以,你可以这样使用:a,=1,2 这样就没问题了. 先将a转变为tuple, 然后再进行解包.
那, 这到底有什么用呢?
除了上面所说的多变量赋值外, 解包还可以用来 进行变量的交换, 直接获取函数的返回值.
变量交换
直接看demo吧:
>>> a[1]>>> b2>>> a,b = b,a
只要交换位置即可, 编译器内部会帮我们自动进行中间量的添加.
获取函数返回值
这个就不用多说了. 就相当于变量的直接复制.比如, dict中的popitem方法, 他会随机删除掉一个key/value pair. 所以,如果你想获取删除的值就可以这样写:
>>> new_dict{1: 0, 2: 0, 3: 0, 4: 0}>>> key,value = new_dict.popitem()
chained assignment
上面的解包代表的是一一映射的关系, 在py中,我们还可以使用它的链式赋值,相当于一对多的关系.
>>> a = b = 2
看个总结:
关键字:python3.x, 赋值, 解包, 元组
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!