Day5_协程函数_面向过程
2024-08-25 06:16:39
def func(count):
while True:
yield count
count +=1 #这是一个生成器,需要利用next()来执行。
func(10)
#yield:
#1.把函数的执行结果封装好_iter_ 和_next_,即得到一个迭代器。
#2.与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yield可以返回多次值。
#3.函数暂停与再继续运行的状态是由yield保存。
#yield的表达式应用:
#用法:
def eater(name):
print('%s 说:我开动啦' %name)
food_list=[]
while True:
food=yield food_list
food_list.append(food) #['骨头','菜汤']
print('%s eat %s' %(name,food))
#
# alex_g=eater('alex')
# #第一阶段:初始化
# next(alex_g) #等同于alex_g.send(None)
# print('===========>')
#
# #第二阶段:给yield传值
# print(alex_g.send('骨头')) #1 先给当前暂停位置的yield传骨头 2 继续往下执行,直到再次碰到yield,然后暂停并且把yield后的返回值当做本次调用的返回值
# # print('===========>')
# print(alex_g.send('菜汤'))
# print(alex_g.send('狗肉包子')) #将吃的部分定义成模块,实现模块交互
def producer():
alex_g=eater('alex')
#初始化
next(alex_g)
#第二阶段:给yield传值
while True:
food=input('>>:').strip()
if not food:continue
print(alex_g.send(food))
producer()
面向过程:核心即过程二字,过程即解决问题的步骤,基于面向过程去设计程序,就是设计一条工业流水线,是一种机械式的思维方式。
优点:程序结构清晰,可以把复杂的文件简单化,流程化。
缺点:可扩展性差,一条流水线只是用来解决一个问题。
应用场景:linux内核,git,httpd,shell脚本。
实现一个小程序: tail -f access.log | grep 'error'
第一阶段:找到所有文件的绝对路径
第二阶段:打开文件
第三阶段:循环读出每一行内容
第四阶段:过滤
第五阶段:打印该行属于的文件名
#遍历检索目录下的文件,需要用到os这个模块。
import os
#装饰器
def init(func):
def wrapper(*args,**kwargs):
g=func(*args,**kwargs)
next(g)
return g
return wrapper #找到所有文件的绝对路径
@init
def search(target):
while True:
filepath=yield
g=os.walk(filepath)
for pardir,_,files in g:
print(pardir,files)
for file in files:
abspath=r'%s\%s' %(pardir,file)
print(abspath)
target.send(abspath) #第二阶段:打开文件
@init
def opener(target):
while true:
abspath=yield
with open(abspath) as f:
print(f)
#第三阶段:循环读取文件的每一行内容
@init
def cat(target):
while True:
abspath,f=yield
for line in f:
target.send(abspath,line)
if res:break #第四阶段,过滤
@init
def grep(pattern,target):
tag=False
while True:
abspath,line=yield tag
tag=False
if pattern in line:
target.send(abspath)
tag=True
#第五阶段,打印该行属于的文件名
@init
def print():
while True:
abspath=yield
print(abspath) g=search(opener(cat(grep('error',print()))))
g.send(r'路径')
最新文章
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
- vs2010编辑器中找不到System.Web.Extensions.dll
- SQL Server 2014新特性——事务持久性控制
- 精通javascript(看书笔记)
- iosiPhone屏幕尺寸、分辨率及适配
- oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)
- 【转】C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
- iBatisSQL中prepend的问题
- lintcode:排颜色 II
- JPA project Change Event Handler问题解决[转]
- 批量下载QQ空间日志
- hdu4635Strongly connected
- iOS依据字符串计算UITextView高度
- [每日一题] OCP1z0-047 :2013-08-01 正则表达式--- REGEXP_REPLACE 函数
- 自学WEB前端能不能找到一份前端开发工作
- Python面试题(二)【转】
- Python: datetime 转换
- VideoPlayer播放
- dotnetcore/CAP
- Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式