Python基础之赋值魔法

1.序列解包

python中支持同时(并行)给多个变量赋值:

>>> x,y,z = 1,2,3
>>> print(x,y,z)
1 2 3
>>> x,y = y,x   #使用一条语句实现交换
>>> print(x,y,z)
2 1 3

这种方式成称为序列解包(或可迭代对象解包):
将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。

>>> values = (1,2,3)  #u一个元组
>>> values
(1, 2, 3)
>>> x,y,z = values
>>> y
2

这在使用返回元组(或其他序列或可迭代对象)的函数或方法时很有用。
但是需要注意要解包的序列包含的元素个数必须和你在等号左边列出的目标个数相同,否则Python会引发异常。

>>> x,y,z = 1,2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)

但是当右边的值多余的时候,可用星号*来收集多余的值。这样无需确保值和变量个数相同。

>>> a,b,*rest = [1,2,3,4]
>>> rest
[3, 4]
>>> a,*mid,b = [1,2,3,4]
>>> mid
[2, 3]
>>> a,*b,c = [1,2,3]
>>> b
[2]
>>> a,b,c
(1, [2], 3)

赋值语句的右边可以是任何类型的序列,但是带型号的变量最终包含的总是一个列表。即使变量和值的个数匹配。

2.链式赋值

链式赋值是一种快捷方式,用于将多个变量关联到同一值。

x = y = somefunction()

上述代码与下面代码等价:

y = somefunction()
x = y

但是与下面代码不等价:

x = somefunction()
y = somefunction()
3.增强赋值

python支持增强赋值操作,包含所有的标准运算符,如*、/、%等。

>>> x = 2
>>> x += 1
>>> x *= 2
>>> x /= 3
>>> x
2.0

当然又可以用于其他数据类型,如字符串:

>>> s = 'foo'
>>> s += 'bar'
>>> s *= 2
>>> s
'foobarfoobar'
参考资料

1.Beginning Python From Novice to Professional Third Edition. Magnus Lie Hetland
2.Python标准英文文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值