协程

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)- 协程函数及应用的更多相关文章

  1. python 3 协程函数

    python 3 协程函数 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器 2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yiel ...

  2. Python之协程函数

    Python之协程函数 什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数. def eater(name): print('%s star ...

  3. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  4. python之协程函数、递归、二分法

    一.协程函数: 协程函数的语法: def eater(name): print('%s说:我开动啦' %name) food_list=[] while True: food=yield food_l ...

  5. python基础-协程函数、递归、模块、包等内容

    1. 协程函数 1.1 yield基本用法 yield作用 1.把函数的执行结果封装好,即封装__iter__和__next__,即得到一个迭代器 2.与return功能类似,都可以返回值,但不同的是 ...

  6. python自动化 协程函数、二分查找、模块搜索

    协程函数 yiled: 把函数的执行结果封装好__iter__和__next__得到一个迭代器 与return功能类似,都可以返回值,但是return只能返回一次只 def fun(count): p ...

  7. python协程函数应用 列表生成式 生成器表达式

    协程函数应用 列表生成式 生成器表达式   一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._n ...

  8. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  9. python基础之协程函数、列表表达式、生成器表达式

    一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...

  10. python基础----迭代器、生成器、协程函数及应用(面向过程实例)

    一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...

随机推荐

  1. [译]pycache是什么?

    原回答: https://stackoverflow.com/questions/16869024/what-is-pycache 当你用python运行一个程序时,解释器首先将它编译成字节码(这是一 ...

  2. 校赛——1096Is The Same?(KMP或字符串的最小、大表示法)

    1096: Is The Same? Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 26  Solved: 8[Submit][Status][Web B ...

  3. NOJ——1665夜神的思考(YY+组合问题+分类讨论)

    [1665] 夜神的思考 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近夜神对二进制很感兴趣,于是他每次看到一串只包含1和0的字符串的时候就会想,这串字符串有多少子串是含有k个 ...

  4. bzoj3207花神的嘲讽计划Ⅰ

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=3207 给定一个原字符串和m个询问,每次查询原字符串[l,r]内是否包含给定字符串s (len( ...

  5. 刷题总结——生产产品(vijo1243)

    题目: 描述 在经过一段时间的经营后,dd_engi的OI商店不满足于从别的供货商那里购买产品放上货架,而要开始自己生产产品了!产品的生产需要M个步骤,每一个步骤都可以在N台机器中的任何一台完成,但生 ...

  6. java面试题之Error和Exception的区别

    从概念角度分析: Error:程序无法处理的系统错误,编译器不做检查: Exception:程序可以处理的异常,捕获后可能恢复: 总结:前者是程序无法处理的错误,后者是可以处理的异常. 从责任角度分析 ...

  7. hdu 4400 离散化+二分+BFS(暴搜剪枝还超时的时候可以借鉴一下)

    Mines Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  8. js simple drag.

    // by zhangxinxu welcome to visit my personal website http://www.zhangxinxu.com/ // zxx.drag v1.0 20 ...

  9. web实时长图实践--摘抄

    背景简介 全民K歌专辑发布新玩法,传统宣传专辑战绩的流程,从获取数据,到制作海报,到传播,周期长运营成本高,如何快速分享战绩进行荣誉感的传播成为一个亟待解决的问题. 产品:能不能在专辑大事件触发时,自 ...

  10. js函数的四种调用方式以及对应的this指向

    一.函数调用,此时this是全局的也就是window 1 var c=function(){ 2 alert(this==window) 3 } 4 c()//true 二.方法调用 var myOb ...