序列解包和生成器表达式

序列解包

可以使用序列解包功能对多个变量同时赋值

(1)

python 复制代码
x, y, z = 1, 2, 3
print(x, y, z)

必须一一对应

x, y, z = 1, 2 会抛出异常

(2)

括号可加可不加

python 复制代码
v_tuple = (False, 3.5, 'abc')
(x, y, z) = v_tuple  # 等价于x, y, z = v_tuple
print(x, y, z)

可以对range对象进行解包

python 复制代码
x, y, z = range(3)
print(x, y, z)

使用迭代器对象进行解包

python 复制代码
x, y, z = iter([1, 2, 3])
print(x, y, z)

使用map对象进行解包

python 复制代码
x, y, z = map(str, range(3))
print(x, y, z)
print((x, y, z))

交换两个变量的值

python 复制代码
a, b = 1, 2
a, b = b, a
print(a, b)

对列表解包

python 复制代码
x, y, z = sorted([1, 3, 2])
print(x, y, z)

对字符串解包

python 复制代码
a, b, c = 'ABC'
print(a, b, c)
print((a, b, c))

切片也支持序列解包

python 复制代码
x = [1, 2, 3, 4]
x[:3] = map(str, range(3))
print(x)

序列解包对于列表和字典同样有效

python 复制代码
s = {
    'a': 1,
    'b': 2,
    'c': 3
}
a, b, c = s.items()
print(a)
d, e, f = s  # 默认是键
print(d)

python3.5之后的版本支持下面用法的序列解包

python 复制代码
print(*[1, 2, 3], 4, *(5, 6))
print(*range(4), 4)
print({*range(4), 4, *(5, 6, 7)})
print({'x': 1, **{'y': 2}})  # 字典解包要用**

生成器表达式

  • 生成器表达式的结果是一个生成器(generator)对象
  • 可将其转为列表或元组,也可使用生成器对象__next__()方法或内置函数next()进行遍历,或者将其作为迭代器对象来使用
  • 生成器对象具有惰性求值的特点,只在需要时生成新元素,空间占用非常少,尤其适合大数据处理的场合.类似的还有range对象,zip对象,map对象,enumerate对象,filter对象等
  • 不管用哪种方法访问生成器对象,都无法再次访问已访问过的元素
python 复制代码
g = ((i + 2) ** 2 for i in range(10))  # 创建生成器对象
print(g)
print(tuple(g))  # 将生成器对象转换为元组
print(list(g))  # 生成器对象已遍历结束,没有元素了

使用生成器对象 __ next __ ()方法或内置函数next()进行遍历

python 复制代码
g = ((i + 2) ** 2 for i in range(10))  # 创建生成器对象
print(g.__next__())  # 使用生成器对象的__next__()方法获取元素
print(g.__next__())  # 获取下一个元素
print(next(g))  # 使用函数next()获取生成器对象中的元素
print(list(g))

使用for循环直接迭代生成器对象中的元素

python 复制代码
g = ((i + 2) ** 2 for i in range(10))
for item in g:  # 使用循环直接遍历生成器对象中的元素
    print(item, end=' ')
相关推荐
hyhrosewind38 分钟前
Python函数基础:说明文档(多行注释),函数嵌套调用,变量作用域(局部,全局,global关键字),综合案例
python·变量作用域·函数说明文档(多行注释)·函数嵌套调用·局部变量和全局变量·函数内修改全局变量·global关键字
一点.点1 小时前
李沐动手深度学习(pycharm中运行笔记)——04.数据预处理
pytorch·笔记·python·深度学习·pycharm·动手深度学习
一点.点1 小时前
李沐动手深度学习(pycharm中运行笔记)——07.自动求导
pytorch·笔记·python·深度学习·pycharm·动手深度学习
大霸王龙2 小时前
Python对比两张CAD图并标记差异的解决方案
python·opencv·计算机视觉
萧鼎3 小时前
PDFMathTranslate:让数学公式在PDF翻译中不再痛苦
python·pdf
@_猿来如此3 小时前
Django 实现电影推荐系统:从搭建到功能完善(附源码)
数据库·后端·python·django
Python×CATIA工业智造3 小时前
爬虫技术入门:基本原理、数据抓取与动态页面处理
爬虫·python·pycharm
fmdpenny4 小时前
用python写一个相机选型的简易程序
开发语言·python·数码相机
敲敲敲-敲代码4 小时前
【PyCharm- Python- ArcGIS】:安装一个和 ArcGIS 不冲突的独立 Python让PyCharm 使用 (解决全过程记录)
python·arcgis·pycharm
猿榜编程4 小时前
python基础-requests结合AI实现自动化数据抓取
开发语言·python·自动化