给妹子讲python-S01E15迭代环境

简介:

Python中,从左到右扫描的每种工具都使用了之前介绍的迭代协议,都可以称之为迭代环境,如for循环表达式、列表解析式、in成员关系测试,map内置函数,sorted和zip等调用等,都可以传入一个可迭代对象,进行迭代。

Sorted对可迭代对象中的各项进行排序,zip对可迭代对象中的各项进行组合,enumerate对可迭代对象中的各项进行位置值配对,他们都接受一个可迭代对象作为参数。

同时zip、enumerate和filter调用的结果是返回一个可迭代对象,可以利用list函数调用来进行展现。只有sorted函数的结果是返回一个真正的列表。

 

print (sorted( open ( 'myfile.txt' )))

[ 'goodbyt text file\n' , 'hahahahah\n' , 'hello text file\n' ]

当然,还包括一些其他的内置方法,如sum,any,all,max,min都可以传入任何可迭代对象。本质是接受任何可迭代对象作为一个参数,并且使用迭代协议来扫描处理,并返回结果。

更扩展的来说,一般意义上,能从左到右的扫描一个对象的各种工具,实质上都在主体对象上使用了迭代协议,这么看的话,还包括了list和tuple、set内置函数,他们也是通过迭代协议扫描可迭代对象,构建新的对象。还有字符串join方法,它将一个子字符串放置到一个被包含在可迭代对象的字符串之间,这么想想,迭代的概念确实在python中无处不在,甚至包括赋值,也有这么点味道。看看下面分别举的几个例子。

 

print (list( open ( 'myfile.txt' )))

[ 'hello text file\n' , 'goodbyt text file\n' , 'hahahahah\n' ]
 

print (tuple( open ( 'myfile.txt' )))

( 'hello text file\n' , 'goodbyt text file\n' , 'hahahahah\n' )
 

print ( '&&' .join( open ( 'myfile.txt' )))

hello text file
&&goodbyt text file
&&hahahahah
 

a,b,c = open ( 'myfile.txt' )
print (a,b,c)

hello text file
goodbyt text file
Hahahahah

我们最后俩回顾一下列表解析式。列表解析式也是最常应用迭代协议的环境之一,他与for循环一起使用。

 

L = [ 1 , 2 , 3 ]
L1 = [x+ 3 for x in L]

Python在解释器内部执行一个遍历L的迭代,按照顺序把X赋给每个元素,并且对各元素运行左边的表达式,并将结果收集为一个列表,我们得到的结果列表就是列表解析所表达的内容,上面的例子中包含了针对L中每个元素x运行x+3的一个新列表。这种列表解析的方式比手动的for循环更快,因为他们的迭代在解释器内部是以C语言的速度执行的。

 

lines = [line.rstrip() for line in open ( 'myfile.txt' )]
print ( lines )

[ 'hello text file' , 'goodbyt text file' , 'hahahahah' ]

【妹子说】这几节可是被迭代二字反复轰炸呀,先介绍了循环迭代的基本用法和高级技巧,然后介绍了迭代协议、可迭代对象以及迭代器,最后学习了迭代环境。

对,内容不少啊。最后我们再次总结一下可迭代对象的好处:

如果函数返回的结果是可迭代对象,那么他意味着是根据请求依次一个一个的返回结果,而不是一次性的构建整个列表。这可以节约内存,根据需要产生结果。这对较大的程序来说很有用,在计算很大的结果列表的时候,像这样做,能很好的节约内存。

本节介绍的字典的一些方法keys、values、items以及内置函数range、map、zip、filter都是如此,他们都会返回可迭代对象。

根据需要产生数据,而不是在内存中构建一个结果列表,从而达到节约内存空间的目的,这是可迭代对象最重要的好处。


原文发布时间为:2018-08-27

本文作者:给妹子讲python

本文来自云栖社区合作伙伴“Python爱好者社区”,了解相关信息可以关注“Python爱好者社区”。

相关文章
|
2月前
|
开发者 Python 容器
深入理解Python迭代器:迭代机制的核心与应用
本文介绍了Python迭代器的核心概念、工作原理和应用场景。迭代器是遍历容器类型数据结构(如列表、元组、字典和集合)的对象,遵循迭代器协议,具有记忆遍历位置和一次性特点。通过实现迭代器协议,开发者能为自定义类型定义迭代行为,实现高效处理大量数据和与其他迭代工具协同工作。迭代器与可迭代对象的区别在于,可迭代对象实现`__iter__()`方法,返回迭代器,而迭代器实现`__next__()`方法,用于逐个访问元素。理解并运用迭代器能提升Python代码的性能和可读性。
|
2月前
|
Unix Shell Linux
赞!优雅的Python多环境管理神器!易上手易操作!
赞!优雅的Python多环境管理神器!易上手易操作!
|
3天前
|
Shell 数据安全/隐私保护 Docker
docker安装anaconda3 python环境
docker安装anaconda3 python环境
10 0
|
4天前
|
人工智能 IDE 开发工具
python环境安装教程
python环境安装教程
23 0
|
12天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】Python环境下的机器学习库概览
【4月更文挑战第30天】本文介绍了Python在机器学习中的重要性及几个主流库:NumPy用于数值计算,支持高效的数组操作;Pandas提供数据帧和序列,便利数据处理与分析;Matplotlib是数据可视化的有力工具;Scikit-learn包含多种机器学习算法,易于使用;TensorFlow和Keras是深度学习框架,Keras适合初学者;PyTorch则以其动态计算图和调试工具受到青睐。这些库助力机器学习研究与实践。
|
19天前
|
机器学习/深度学习 人工智能 运维
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境
Python从入门到精通:1.1.2了解Python基本概念与安装Python环境
|
19天前
|
安全 开发工具 git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
23 0
|
19天前
|
5G Python
Windows11搭建Python环境(Anaconda安装与使用)
Windows11搭建Python环境(Anaconda安装与使用)
45 0
|
24天前
|
存储 Java Python
【Python小知识】如何解决代理IP在多线程环境下的并发问题?
【Python小知识】如何解决代理IP在多线程环境下的并发问题?
|
26天前
|
数据挖掘 测试技术 开发工具
python 以及集成环境的安装
python 以及集成环境的安装