社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

黑客技术和网络安全 • 3 年前 • 451 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨快快

来源丨快学Python


  人生苦短,快学Python!

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

如果有这样一个元组t:

>> t = ('foo''bar''baz''qux')

发生这种情况时,就好像元组中的项目已被“打包”到对象中。我们可以通过索引,获取其中的元素。

>>> t
('foo''bar''baz''qux')
>>> t[0]
'foo'
>>> t[-1]
'qux'

如果随后将该“打包”对象分配给新元组,则各个项目将“解包”到元组中的对象中。我们来演示一下:

>>> (s1, s2, s3, s4) = t
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

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

>>> (s1, s2, s3) = t
Traceback (most recent call last):
  File "", line 1in 
    (s1, s2, s3) = t
ValueError: too many values to unpack (expected 3)

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

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

>>> (s1, s2, s3, s4) = ('foo''bar''baz''qux')
>>> s1
'foo'
>>> s2
'bar'
>>> s3
'baz'
>>> s4
'qux'

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

>>> (s1, s2, s3, s4, s5) = ('foo''bar''baz''qux')
Traceback (most recent call last):
  File "", line 1in 
    (s1, s2, s3, s4, s5) = ('foo''bar''baz''qux')
ValueError: not enough values to unpack (expected 5, got 4)

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

>>> t = 123
>>> t
(123)

>>> x1, x2, x3 = t
>>> x1, x2, x3
(123)

>>> x1, x2, x3 = 456
>>> x1, x2, x3
(456)

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

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

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

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

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

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

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

>>> a, b = b, a

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

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

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/122239
 
451 次点击