Python基础(8)_迭代器、生成器、列表解析
2017-06-16 16:54
609 查看
一、迭代器
1、什么是迭代
1重复
2下次重复一定是基于上一次的结果而来
用生成器模拟tail-f|grep'error'功能
三、列表解析
python的三元运算格式如下:
result=值1ifx<yelse值2这个是什么意思呢,就是结果=值1if条件1else值2
列表解析:
用三元表达式,将结果写入列表,即为列表解析
列表解析实例:
四、生成器解析
总结:
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
3.Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。
例如,sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和:
sum(x**2forxinxrange(4))
而不用多此一举的先构造一个列表:
sum([x**2forxinxrange(4)])
1、什么是迭代
1重复
2下次重复一定是基于上一次的结果而来
1#模拟tail-fa.txt 2importtime 3deftail(filepath,encoding): 4'''从文件读取最后一行内容''' 5withopen(filepath,encoding='utf-8')asf: 6f.seek(0,2) 7whileTrue: 8line=f.readline() 9ifline: 10yieldline 11else: 12time.sleep(0.5) 13defgrep(lines,pattern): 14'''guolv内容,如果有就返回''' 15forlineinlines: 16ifpatterninline: 17#print(line) 18yieldline 19 20g=tail('homework01.txt') 21g2=grep(g,'err0r') 22g3=grep(g2,'404') 23foriing3: 24print(i)
用生成器模拟tail-f|grep'error'功能
三、列表解析
python的三元运算格式如下:
result=值1ifx<yelse值2这个是什么意思呢,就是结果=值1if条件1else值2
列表解析:
用三元表达式,将结果写入列表,即为列表解析
列表解析实例:
1要求:列出1~10所有数字的平方 2#################################################### 31、普通方法: 4>>>L=[] 5>>>foriinrange(1,11): 6...L.append(i**2) 7... 8>>>printL 9[1,4,9,16,25,36,49,64,81,100] 10#################################################### 112、列表解析 12>>>L=[i**2foriinrange(1,11)] 13>>>printL 14[1,4,9,16,25,36,49,64,81,100]
1要求:列出1~10中大于等于4的数字的平方 2#################################################### 31、普通方法: 4>>>L=[] 5>>>foriinrange(1,11): 6...ifi>=4: 7...L.append(i**2) 8... 9>>>printL 10[16,25,36,49,64,81,100] 11#################################################### 122、列表解析 13>>>L=[i**2foriinrange(1,11)ifi>=4] 14>>>printL 15[16,25,36,49,64,81,100]
1要求:列出"/var/log"中所有已'.log'结尾的文件 2################################################## 31、普通方法 4>>>importos 5>>>file=[] 6>>>forfileinos.listdir('/var/log'): 7...iffile.endswith('.log'): 8...file.append(file) 9... 10>>>printfile 11['anaconda.ifcfg.log','Xorg.0.log','anaconda.storage.log','Xorg.9.log','yum.log','anaconda.log','dracut.log','pm-powersave.log','anaconda.yum.log','wpa_supplicant.log','boot.log','spice-vdagent.log','anaconda.program.log'] 12################################################## 132.列表解析 14>>>importos 15>>>file=[fileforfileinos.listdir('/var/log')iffile.endswith('.log')] 16>>>printfile 17['anaconda.ifcfg.log','Xorg.0.log','anaconda.storage.log','Xorg.9.log','yum.log','anaconda.log','dracut.log','pm-powersave.log','anaconda.yum.log','wpa_supplicant.log','boot.log','spice-vdagent.log','anaconda.program.log']
四、生成器解析
1############################################# 2egg_list=['鸡蛋%s'%iforiinrange(10)]#列表解析 3 4############################################# 5 6laomuji=('鸡蛋%s'%iforiinrange(10))#生成器表达式 7print(laomuji) 8print(next(laomuji))#next本质就是调用__next__ 9print(laomuji.__next__()) 10print(next(laomuji))
总结:
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
3.Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。
例如,sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和:
sum(x**2forxinxrange(4))
而不用多此一举的先构造一个列表:
sum([x**2forxinxrange(4)])
相关文章推荐
- Python基础02--迭代器、生成器、列表解析
- Python 三目运算,列表解析,装饰器,迭代器和生成器
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- Python基础:08列表解析与生成器表达式
- Python 生成器函数,生成器表达式,迭代器,列表解析
- python中迭代器、列表解析、生成器的分析比较
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- 4 Python 迭代器_生成器_列表解析
- python基础(3)--条件判断循环语句与列表解析,生成器
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- python--迭代器,生成器,三元表达式,列表解析,生成器表达式
- python基础-迭代器、for底层机制、生成器、list结合yield、__call__、yield函数列表
- python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器
- 举例讲解Python中的迭代器、生成器与列表解析用法
- 举例讲解Python中的迭代器、生成器与列表解析用法
- python基础-迭代器和生成器
- Python语言基础之计时,pickle,列表解析
- Python(迭代、三元表达式、列表生成、生成器、迭代器)
- Python的高级特性2:列表推导式,生成器与迭代器
- 解析Python中的生成器及其与迭代器的差异