前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解Python中的序列解包(2)

详解Python中的序列解包(2)

作者头像
Python小屋屋主
发布2018-04-16 17:06:59
1.3K0
发布2018-04-16 17:06:59
举报
文章被收录于专栏:Python小屋Python小屋

8个月前曾经发过一篇关于序列解包的文章,见详解Python序列解包,本文再稍作补充。

可以说,序列解包的本质就是把一个序列或可迭代对象中的元素同时赋值给多个变量,如果等号右侧含有表达式,会把所有表达式的值先计算出来,然后再进行赋值。下面是一些序列解包的用法:

#多个变量同时赋值

>>> x, y, z = 1, 2, 3 >>> v_tuple = (False, 3.5, 'exp') >>> (x, y, z) = v_tuple >>> x, y, z = v_tuple

#可以对range对象进行序列解包

>>> x, y, z = range(3)

#使用迭代器对象进行序列解包

>>> x, y, z = iter([1, 2, 3])

#使用可迭代的map对象进行序列解包

>>> x, y, z = map(str, range(3))

#交换两个变量的值

>>> a, b = b, a

#sorted()函数返回排序后的列表

>>> x, y, z = sorted([1, 3, 2])

#字符串也支持序列解包

>>> a, b, c = 'ABC' >>> x = [1, 2, 3, 4, 5, 6]

#切片也支持序列解包

>>> x[:3] = map(str, range(5)) >>> x ['0', '1', '2', '3', '4', 4, 5, 6]

在上面的例子中,a, b = b, a是比较特殊的一个,可以这样理解:先把变量a和b原来的值取出来组成一个元组,然后再把这个元组序列解包赋值给变量a和b。

再例如,下面的代码用来生成斐波那契数列中小于1000的数字:

def fib(n): a, b = 1, 1 while a < n: print(a, end=' ') a, b = b, a+b print()

在这段代码中第一行a, b = 1, 1和倒数第二行的a, b = b, a+b都属于序列解包的用法,其中a, b = 1, 1很容易理解,但是很多朋友对a, b = b, a+b这个语句不太理解。这个语句的执行过程是这样的:假设现在a=3和b=5,那么先使用这两个变量原来的值计算等号右侧的元组得到(5, 3+5)也就是(5, 8),然后序列解包赋值给变量a和b,结果是a = 5和b = 8。

再例如,之前发过的文章Python两种方法求解登楼梯问题(京东2016笔试题)中,第一段代码就用到了序列解包。

-----------------分割线---------------

今日习题:在Python解释器环境中运行表达式reduce(lambda x,y: max(x,y), (1,5,2,3,4)),查看计算结果,并尝试理解这个代码的原理和执行过程,可以参考详解Python函数式编程之map、reduce、filter几段小代码解释Python命令式编程和函数式编程

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

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

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

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

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