前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python赋值、打包和解包,90%人不清楚的知识点!

Python赋值、打包和解包,90%人不清楚的知识点!

作者头像
快学Python
发布2021-10-27 15:57:49
5500
发布2021-10-27 15:57:49
举报
文章被收录于专栏:快学Python快学Python

人生苦短,快学Python!

关于赋值、打包和解包这 3个概念,我觉得有必要做一个分享,因为很多朋友确实不清楚。

如果有这样一个元组t:

代码语言:javascript
复制
>> t = ('foo', 'bar', 'baz', 'qux')

发生这种情况时,就好像元组中的项目已被“打包”到对象中。

我们可以通过索引,获取其中的元素。

代码语言:javascript
复制
>>> t
('foo', 'bar', 'baz', 'qux')
>>> t[0]
'foo'
>>> t[-1]
'qux'

如果随后将该“打包”对象分配给新元组,则各个项目将“解包”到元组中的对象中。

我们来演示一下:

代码语言:javascript
复制
>>> (s1, s2, s3, s4) = t
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

解包时,左侧的变量数必须与元组中的值数相匹配,否则会报错。

代码语言:javascript
复制
>>> (s1, s2, s3) = t
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    (s1, s2, s3) = t
ValueError: too many values to unpack (expected 3)

>>> (s1, s2, s3, s4, s5) = t
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    (s1, s2, s3, s4, s5) = t
ValueError: not enough values to unpack (expected 5, got 4)

打包和解包,也可以合并为一个语句以进行复合赋值。

代码语言:javascript
复制
>>> (s1, s2, s3, s4) = ('foo', 'bar', 'baz', 'qux')
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

同样,赋值左侧元组中的元素数量必须等于右侧的数量。

代码语言:javascript
复制
>>> (s1, s2, s3, s4, s5) = ('foo', 'bar', 'baz', 'qux')
Traceback (most recent call last):
  File "<pyshell#63>", line 1, in <module>
    (s1, s2, s3, s4, s5) = ('foo', 'bar', 'baz', 'qux')
ValueError: not enough values to unpack (expected 5, got 4)

在像这样的赋值和少数其他情况下,Python允许省略通常用于表示元组的括号。

代码语言:javascript
复制
>>> t = 1, 2, 3
>>> t
(1, 2, 3)

>>> x1, x2, x3 = t
>>> x1, x2, x3
(1, 2, 3)

>>> x1, x2, x3 = 4, 5, 6
>>> x1, x2, x3
(4, 5, 6)

>>> t = 2,
>>> t
(2,)

编程时经常有两个变量需要交换其值。在大多数编程语言中,有必要在交换发生时将其中一个值存储在临时变量中,如下所示:

代码语言:javascript
复制
>>> a = 'foo'
>>> b = 'bar'
>>> a, b
('foo', 'bar')

>>> temp = a
>>> a = b
>>> b = temp

>>> a, b
('bar', 'foo')

在 Python 中,交换可以通过单个元组赋值来完成。

代码语言:javascript
复制
>>> a = 'foo'
>>> b = 'bar'
>>> a, b
('foo', 'bar')

>>> a, b = b, a

>>> a, b
('bar', 'foo')

这种操作语法足够精简,是Java等语言,无法比拟的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 快学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档