博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day5_协程函数_面向过程
阅读量:6083 次
发布时间:2019-06-20

本文共 2240 字,大约阅读时间需要 7 分钟。

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'路径')

 

转载于:https://www.cnblogs.com/sexiaoshuai/p/7269172.html

你可能感兴趣的文章
控制并发访问资源 -- Semaphore
查看>>
for循环的简单例子:求100以内的偶数和
查看>>
真正聪明的人都是下笨功夫(深度好文)
查看>>
facebook160亿美元收购WhatsApp
查看>>
Python 05 自定义函数的创建、调用和函数
查看>>
千方百计获取百度网盘下载链接
查看>>
淘宝网页变为繁体,教你如何改回简体
查看>>
网页选项卡
查看>>
数据库的备份与恢复 mysqldump+binlog方式
查看>>
SAMBA服务器的配置
查看>>
Cisco设备配置文件定期备份
查看>>
初次接触Linux
查看>>
mysql行转列(拆分字符串场景)
查看>>
SDL做的一个简单Button
查看>>
php utf8和utf-8的区别
查看>>
近期遇到电脑问题几则
查看>>
lvs nginx 负载均衡
查看>>
Nginx IP纯洁库功能测试
查看>>
H3C MSR 20-10 / 900的×××拨号组网模板
查看>>
Java学习路线
查看>>