python 列表表达式、生成器表达式和协程函数
列表表达式、生成器表达式和协程函数
一、列表表达式:
常规方式示例:
egg_list=[]
for i in range(100):
egg_list.append("egg%s"%i)
print(egg_list)
执行结果是:
['egg0', 'egg1', 'egg2', 'egg3', 'egg4', 'egg5', 'egg6', 'egg7', 'egg8', 'egg9', 'egg10', 'egg11', 'egg12', 'egg13', 'egg14', 'egg15', 'egg16', 'egg17', 'egg18', 'egg19', 'egg20', 'egg21', 'egg22', 'egg23', 'egg24', 'egg25', 'egg26', 'egg27', 'egg28', 'egg29', 'egg30', 'egg31', 'egg32', 'egg33', 'egg34', 'egg35', 'egg36', 'egg37', 'egg38', 'egg39', 'egg40', 'egg41', 'egg42', 'egg43', 'egg44', 'egg45', 'egg46', 'egg47', 'egg48', 'egg49', 'egg50', 'egg51', 'egg52', 'egg53', 'egg54', 'egg55', 'egg56', 'egg57', 'egg58', 'egg59', 'egg60', 'egg61', 'egg62', 'egg63', 'egg64', 'egg65', 'egg66', 'egg67', 'egg68', 'egg69', 'egg70', 'egg71', 'egg72', 'egg73', 'egg74', 'egg75', 'egg76', 'egg77', 'egg78', 'egg79', 'egg80', 'egg81', 'egg82', 'egg83', 'egg84', 'egg85', 'egg86', 'egg87', 'egg88', 'egg89', 'egg90', 'egg91', 'egg92', 'egg93', 'egg94', 'egg95', 'egg96', 'egg97', 'egg98', 'egg99']
使用列表表达式的方式是:(2行代码即可)
示例:
l=["egg%s"%i for i in range (100)]
print(l)
执行结果是:
['egg0', 'egg1', 'egg2', 'egg3', 'egg4', 'egg5', 'egg6', 'egg7', 'egg8', 'egg9', 'egg10', 'egg11', 'egg12', 'egg13', 'egg14', 'egg15', 'egg16', 'egg17', 'egg18', 'egg19', 'egg20', 'egg21', 'egg22', 'egg23', 'egg24', 'egg25', 'egg26', 'egg27', 'egg28', 'egg29', 'egg30', 'egg31', 'egg32', 'egg33', 'egg34', 'egg35', 'egg36', 'egg37', 'egg38', 'egg39', 'egg40', 'egg41', 'egg42', 'egg43', 'egg44', 'egg45', 'egg46', 'egg47', 'egg48', 'egg49', 'egg50', 'egg51', 'egg52', 'egg53', 'egg54', 'egg55', 'egg56', 'egg57', 'egg58', 'egg59', 'egg60', 'egg61', 'egg62', 'egg63', 'egg64', 'egg65', 'egg66', 'egg67', 'egg68', 'egg69', 'egg70', 'egg71', 'egg72', 'egg73', 'egg74', 'egg75', 'egg76', 'egg77', 'egg78', 'egg79', 'egg80', 'egg81', 'egg82', 'egg83', 'egg84', 'egg85', 'egg86', 'egg87', 'egg88', 'egg89', 'egg90', 'egg91', 'egg92', 'egg93', 'egg94', 'egg95', 'egg96', 'egg97', 'egg98', 'egg99']
如果想加入if判断也非常便利
示例:
l=["egg%s"%i for i in range (100) if i >90]
print(l)
l=["egg%s"%i for i in range (100) if i >90 if i>95]
print(l)
执行结果是:
['egg91', 'egg92', 'egg93', 'egg94', 'egg95', 'egg96', 'egg97', 'egg98', 'egg99']
['egg96', 'egg97', 'egg98', 'egg99']
如果需要使用多个for循环的话
常规方式:
示例:
import os#导入模块
g=os.walk("C:\\SWTOOLS")#查看电脑C盘下的SWTOOLS
l=[]
for i in g :
for j in i :
l.append("%s\\%s"%(i[0],j))
print(l)
执行结果是:
['C:\\SWTOOLS\\C:\\SWTOOLS', "C:\\SWTOOLS\\['Theme']", 'C:\\SWTOOLS\\[]', 'C:\\SWTOOLS\\Theme\\C:\\SWTOOLS\\Theme', 'C:\\SWTOOLS\\Theme\\[]', 'C:\\SWTOOLS\\Theme\\[]']
使用列表表达式的方式是:
示例:
import os#导入模块
g=os.walk("C:\\SWTOOLS")#查看电脑C盘下的SWTOOLS
l=["%s\\%s"%(i[0],j)for i in g for j in i ]
print(l)
执行结果是:
['C:\\SWTOOLS\\C:\\SWTOOLS', "C:\\SWTOOLS\\['Theme']", 'C:\\SWTOOLS\\[]', 'C:\\SWTOOLS\\Theme\\C:\\SWTOOLS\\Theme', 'C:\\SWTOOLS\\Theme\\[]', 'C:\\SWTOOLS\\Theme\\[]']
二、生成器表达式:
示例:
l=("egg%s"%i for i in range (100))
print(l)
print(l.__next__())#每一次._next_一下,取出一个值
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())##超出边界,当for循环结束时,捕捉到StopIteration异常,终止迭代
执行结果是:
<generator object <genexpr> at 0x0000000001DDFF68>
egg0
egg1
egg2
egg3
egg4
egg5
egg6
总结:
1.把列表解析的[]换成()得到的就是生成器表达式
2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
三、协程函数
即生成器yield的表达式的形式
示例:
def eater (name):
print("%s start to eat"%name)
food_list=[]
while True:
food=yield food_list
print("%s eat %s"%(name,food))
food_list.append(food)
e=eater("tom")#执行的是foo_1(“tom”)
next(e)#触发函数运行
print(e.send("鸡蛋"))
print(e.send("苹果"))
执行结果是:
tom start to eat
tom eat 鸡蛋
['鸡蛋']
tom eat 苹果
['鸡蛋', '苹果']
python 列表表达式、生成器表达式和协程函数的更多相关文章
- Py修行路 python基础 (十二) 协程函数应用 列表生成式 生成器表达式
一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._next_() 取下一个值 优点: 1.提供了 ...
- Python - 列表解析式/生成器表达式
列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...
- python基础之协程函数、列表表达式、生成器表达式
一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...
- python协程函数应用 列表生成式 生成器表达式
协程函数应用 列表生成式 生成器表达式 一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...
- python之列表和生成器表达式篇
一.协程函数的应用 写一个装饰器用于让协程函数不需要输入再执行一次next()函数 分析: 在装饰器中生成该协程函数的生成器, 并且执行一次next()函数 def firstNext(func): ...
- Python并发编程之从生成器使用入门协程(七)
大家好,并发编程 进入第七篇. 从今天开始,我们将开始进入Python的难点,那就是协程. 为了写明白协程的知识点,我查阅了网上的很多相关资料.发现很难有一个讲得系统,讲得全面的文章,导致我们在学习的 ...
- python基础----迭代器、生成器、协程函数及应用(面向过程实例)
一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- python协程函数、递归、匿名函数与内置函数使用、模块与包
目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...
随机推荐
- Java进阶知识点1:白捡的扩展性 - 枚举值也是对象
一.背景 枚举经常被大家用来储存一组有限个数的候选常量.比如下面定义了一组常见数据库类型: public enum DatabaseType { MYSQL, ORACLE, SQLSERVER } ...
- C指针分析详解
局部变量和全局变量初始化区别: 局部变量,在未初始化情况下,初值为随机值.C规范对该初值并没有做规定,具体实现由编译器决定.如VC/VS等编译器,会将初始值值为0xCCCCCCCC, 而GCC等编译器 ...
- Python 3 学习笔记之——标准库概述
1. 操作系统接口 os 模块提供了一些与操作系统相关联的函数. >>> os.getcwd() # 获取当前工作目录 '/home/senius' >>> os. ...
- 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)
首先贴上代码原作者的github:https://github.com/chenyuntc/simple-faster-rcnn-pytorch(非代码作者,博文只解释代码) 今天看完了simple- ...
- kaldi基于GMM的单音素模型 训练部分
目录 1. gmm-init-mono 模型初始化 2. compile-train-graghs 训练图初始化 3. align-equal-compiled 特征文件均匀分割 4. gmm-acc ...
- Chrome 与 Firefox-Dev 的 DevTools
不管是做爬虫还是写 Web App,Chrome 和 Firefox 的 DevTools 都是超常用的,但是经常发现别人的截图有什么字段我找不到,别人的什么功能我的 Chrome 没有,仔细一搜索才 ...
- 第16讲——C++中的代码重用
C++的一个主要目标是促进代码重用.除了我们之前学的公有继承,我们在这一讲将介绍另一种代码重用的方法——类模板.
- 关于百度Editor富文本编辑器 自定义上传位置
因为要在网站上编辑富文本数据,所以直接采用百度的富文本编辑器,但是这个编辑器有个缺点,默认情况下,文件只能上传到网站的根目录,不能自定义路径. 而且json配置文件只能和controller.jsp在 ...
- nopcommerce商城系统--升级NopCommerce
原址:http://www.nopcommerce.com/docs/80/upgrading-nopcommerce.aspx 本章介绍如何nopCommerce升级到最新版本.你可能希望这样做,你 ...
- 【Linux】——搭建nexus
1.安装 前提条件: JDK已经安装,运行java -version查看. 将本地下载好的nexus存放到linux上,存放路径为 /usr/local/software.可使用winscp直接拷贝. ...