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

最新文章

  1. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
  2. vs2010编辑器中找不到System.Web.Extensions.dll
  3. SQL Server 2014新特性——事务持久性控制
  4. 精通javascript(看书笔记)
  5. iosiPhone屏幕尺寸、分辨率及适配
  6. oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)
  7. 【转】C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装
  8. iBatisSQL中prepend的问题
  9. lintcode:排颜色 II
  10. JPA project Change Event Handler问题解决[转]
  11. 批量下载QQ空间日志
  12. hdu4635Strongly connected
  13. iOS依据字符串计算UITextView高度
  14. [每日一题] OCP1z0-047 :2013-08-01 正则表达式--- REGEXP_REPLACE 函数
  15. 自学WEB前端能不能找到一份前端开发工作
  16. Python面试题(二)【转】
  17. Python: datetime 转换
  18. VideoPlayer播放
  19. dotnetcore/CAP
  20. Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式

热门文章

  1. (六十四)iOS的socket实现(C+OC混合实现)
  2. java实现:将一个数各个位数相加
  3. UICollectionView请求网络数据显示(Text)
  4. iOS中 UICollectionView UI_19
  5. Linux下触摸屏驱动程序分析
  6. UIViewController/ApplicationSequ…
  7. EBS 可拓展的外部信用风险导入
  8. 关于Android自定义view 你所需要知道的基本函数
  9. Python的time(时间戳与时间字符串互相转化)
  10. IntelliJ Idea + Maven + Junit