python(18)- 协程函数及应用
协程
def init(func):
def wrapper(*args,**kwargs):
obj = func(*args,**kwargs)
next(obj)
return obj
return wrapper @init
def food(name):
print("%s start to eat" % name)
food_list = []
while True:
food = yield food_list
food_list.append(food)
print("%s eat %s" % (name,food_list)) e = food("xyp") # xyp start to eat
e.send("apple") # xyp eat ['apple']
e.send("apple") # xyp eat ['apple', 'apple']
e.send("apple") # xyp eat ['apple', 'apple', 'apple']
......
协程 吃包子
#grep -rl 'python' C:\egon
import os,time
def init(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
next(res)
return res
return wrapper #找到一个绝对路径,往下一个阶段发一个
@init
def search(target):
'找到文件的绝对路径'
while True:
dir_name=yield #dir_name='C:\\egon'
print('车间search开始生产产品:文件的绝对路径')
time.sleep(2)
g = os.walk(dir_name)
for i in g:
# print(i)
for j in i[-1]:
file_path = '%s\\%s' % (i[0], j)
target.send(file_path) @init
def opener(target):
'打开文件,获取文件句柄'
while True:
file_path=yield
print('车间opener开始生产产品:文件句柄')
time.sleep(2)
with open(file_path) as f:
target.send((file_path,f)) @init
def cat(target):
'读取文件内容'
while True:
file_path,f=yield
print('车间cat开始生产产品:文件的一行内容')
time.sleep(2)
for line in f:
target.send((file_path,line)) @init
def grep(pattern,target):
'过滤一行内容中有无python'
while True:
file_path,line=yield
print('车间grep开始生产产品:包含python这一行内容的文件路径')
time.sleep(0.2)
if pattern in line:
target.send(file_path) @init
def printer():
'打印文件路径'
while True:
file_path=yield
print('车间printer开始生产产品:得到最终的产品')
time.sleep(2)
print(file_path) g=search(opener(cat(grep('python',printer()))))
g.send('C:\\egon')
g.send('D:\\dir1')
g.send('E:\\dir2')
协程windows 查找文件
import os def init(func):
def wrapper(*args,**kwargs):
obj = func(*args,**kwargs)
next(obj)
return obj
return wrapper @init
def search(target):
while True:
dir_name = yield
obj = os.walk(dir_name)
for file in obj:
for path in file[-1]:
file_path = "%s/%s" % (file[0],path)
target.send(file_path) @init
def opener(target):
while True:
file_path = yield
with open(file_path) as f:
target.send((file_path,f))
@init
def cat(target):
while True:
file_path,file = yield
for line in file:
target.send((file_path,line))
@init
def grep(pattern,target):
while True:
file_path,line = yield
if pattern in line:
target.send(file_path)
@init
def print_file():
while True:
file_path = yield
print(file_path) g = search(opener(cat(grep("a",print_file()))))
g.send("/Users/centos/Desktop/example")
协程Linux查找文件
模拟grep -rl “python” F:\xuyaping这个命令
#查看xuyaping文件夹所有的绝对路径
import os
g=os.walk("F:\\xuyaping") #g为迭代器
for i in g:
# print(i) #i为文件路径
for j in i[-1]:
file_path="%s\\%s" %(i[0],j)
print(file_path)
程序输出结果:
F:\xuyaping\xuyaping.txt.txt
F:\xuyaping\xuyaping1.txt.txt
F:\xuyaping\a\a.txt.txt
F:\xuyaping\a\a1\a1.txt.txt
F:\xuyaping\a\a1\a2\a2.txt.txt
F:\xuyaping\b\b.txt.txt
代码如下:
#模拟grep -rl “python” F:\xuyaping这个命令 import os,time
#初始化被装饰的函数,使其运行到yield所在的行
def init(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
next(res)
return res
return wrapper #search函数用循环找到一个绝对路径,往下一个阶段opener函数传递一次,直至传递完。
# 所以opener函数循环的收,所以opener函数用while循环。
@init
def search(target): #定义生成器target,用于传递路径file_path
"找到文件的绝对路径"
while True:
dir_name=yield
print("车间search开始生产产品:文件的绝对路径")
time.sleep(1)
g = os.walk(dir_name)
for i in g:
for j in i[-1]:
file_path="%s\\%s" %(i[0],j)
target.send(file_path) #传递路径file_path,给opener函数 @init
def opener(target):
"打开文件,获取文件句柄"
while True:
file_path=yield #opener函数接收search函数传递过来的路径file_path。opener函数将执行结果传递给search函数中的target
print("车间opener开始生产产品:文件句柄")
time.sleep(1)
with open(file_path) as f:
target.send((file_path,f)) #同样传递句柄f 和file_path给cat函数,所以此时用生成器target来传递,同上
@init
def cat(target):
"读取文件内容"
while True:
file_path,f=yield #cat函数接收opener函数传递过来的句柄f 和file_path。cat函数将执行结果传递给opener函数中的target
print("车间cat开始生产产品:文件的一行内容")
time.sleep(1)
for line in f:
target.send((file_path,line)) @init
def grep(pattern,target):
"过滤一行内容中有无python"
while True:
file_path,line=yield
print("车间grep开始生产产品:包含python这一行内容的文件路径")
time.sleep(1)
if pattern in line:
target.send(file_path) @init
def printer():
"打印文件路径"
while True:
file_path=yield
print("车间printer开始生产产品:得到最终的产品")
time.sleep(1)
print(file_path) #g=search("target")--->g=search(opener(target))--->g=search(opener(cat(target)))
# --->g=search(opener(cat(grep(patteren,target))))--->g=search(opener(cat(grep("python",printer()))))
g=search(opener(cat(grep("python",printer()))))
g.send("F:\\xuyaping")
运行结果:
车间search开始生产产品:文件的绝对路径
车间opener开始生产产品:文件句柄
车间cat开始生产产品:文件的一行内容
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间printer开始生产产品:得到最终的产品
F:\xuyaping\xuyaping.txt.txt
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间opener开始生产产品:文件句柄
车间cat开始生产产品:文件的一行内容
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间printer开始生产产品:得到最终的产品
F:\xuyaping\xuyaping1.txt.txt
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间opener开始生产产品:文件句柄
车间cat开始生产产品:文件的一行内容
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间opener开始生产产品:文件句柄
车间cat开始生产产品:文件的一行内容
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间printer开始生产产品:得到最终的产品
F:\xuyaping\a\a1\a1.txt.txt
车间opener开始生产产品:文件句柄
车间cat开始生产产品:文件的一行内容
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间opener开始生产产品:文件句柄
车间cat开始生产产品:文件的一行内容
车间grep开始生产产品:包含python这一行内容的文件路径
车间printer开始生产产品:得到最终的产品
F:\xuyaping\b\b.txt.txt
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
车间grep开始生产产品:包含python这一行内容的文件路径
python(18)- 协程函数及应用的更多相关文章
- python 3 协程函数
python 3 协程函数 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器 2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yiel ...
- Python之协程函数
Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s star ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- python之协程函数、递归、二分法
一.协程函数: 协程函数的语法: def eater(name): print('%s说:我开动啦' %name) food_list=[] while True: food=yield food_l ...
- python基础-协程函数、递归、模块、包等内容
1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...
- python自动化 协程函数、二分查找、模块搜索
协程函数 yiled: 把函数的执行结果封装好__iter__和__next__得到一个迭代器 与return功能类似,都可以返回值,但是return只能返回一次只 def fun(count): p ...
- python协程函数应用 列表生成式 生成器表达式
协程函数应用 列表生成式 生成器表达式 一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...
- python协程函数、递归、匿名函数与内置函数使用、模块与包
目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...
- python基础之协程函数、列表表达式、生成器表达式
一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...
- python基础----迭代器、生成器、协程函数及应用(面向过程实例)
一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...
随机推荐
- /mnt/sdcard 是什么东西
关于/mnt/sdcard和sdcard的区别,可以这样理解:其实,安卓系统是从Linux而衍生出来的,而mnt是unix/Linux传统系统下挂载外部设备的专用目录,Linux默认挂载外部设备都会挂 ...
- csa Round #70
Digit Holes Time limit: 1000 msMemory limit: 256 MB When writing digits, some of them are consider ...
- javascript学习笔记 - 引用类型 RegExp
四 RegExp 格式: var expression = / pattern / flags; 1.flags 为标志.分别为g.i.m. g:表示全局模式.即模式将匹配所有的字符串,而不是在发现第 ...
- 【bzoj3698】XWW的难题 有上下界最大流
题目描述 XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核.XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A ...
- <定时主库导出/备库导入>
1.设置定时任务时间及所需要的dmp文件路径 [mm1@localhost ~]$ crontab -e 0 0 * * * sh /home/mm1/exp_table.sh 2>& ...
- 刷题总结——pole(uva 1638 dp)
题目: 题解: 这道题很妙的一点是很好地利用了最矮的杆子除了放两侧以外对观察数是没有影响的性质·· 考虑n-1个杆子与n个杆子··我们可以把n个杆子的排列看成n-1个杆子的长度加1按原来的排列顺序·· ...
- Introduction to the WinPcap Networking Libraries
Introduction to the WinPcap Networking Libraries use wire shark or fiddler
- python3基础语法(标识符,注释,数据类型,获取用户输出,代码块,python保留字)
编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -*- ...
- 标准C程序设计七---41
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- iOS8下定位问题解决
项目是以前iOS7的,升级iOS8后,无法成功获取用户位置.后来才发现iOS8 使用定位需要在infoplist文件中加2个key,然后manager需要加一个方法,指定定位授权机制 在plist ...