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

Day5_协程函数_面向过程的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Py修行路 python基础 (十二) 协程函数应用 列表生成式 生成器表达式

    一.知识点整理: 1.可迭代的:对象下有_iter_方法的都是可迭代的对象 迭代器:对象._iter_()得到的结果就是迭代器 迭代器的特性: 迭代器._next_() 取下一个值 优点: 1.提供了 ...

随机推荐

  1. 漫谈android系统(4)bring up panel

    点击打开链接 版权声明: 作者:alex wang 版权:本文版权归作者和CSDN共有 转载:欢迎转载,为了保存作者的创作热情,请按要求[转载],谢谢 要求:未经作者同意,必须保留此段声明:必须在文章 ...

  2. 03 EditText文本编辑框

    二  EditText   文本编辑框  父类: TextView     >概念:文本编辑框  可以进行文本编辑         android:textColor="#00f&qu ...

  3. Mybatis源码之Statement处理器CallableStatementHandler(六)

    CallableStatementHandler实际就是使用CallableStatement来执行SQL语句,当然它执行的是存储过程. 源码如下: /** * @author Clinton Beg ...

  4. Android LK Bootlaoder启动概览

    LK - Little kernel 1. 起源地: bootable\bootloader\lk\arch\arm (1)rule.mk $(BUILDDIR)/trustzone-test-sys ...

  5. java同步synchronized

    java同步synchronized volatile仅仅用来保证该变量对所有线程的可见性,但不保证原子性. 看下面的这段代码: /** * * @author InJavaWeTrust * */ ...

  6. OJ题:计算各个数的位数之和

    题目描述: 输入一个大于0的数,要求各个位数的和. 例如: 输入12345 那么输出15 程序如下: ) ; }

  7. 谈谈Ext JS的组件——布局的使用方法

    概述 在Ext JS中,包含两类布局:组件类布局和容器类布局.由于有些组件是有不同的组件组合而成的,如字段就由标题和输入框构成,他们之间也是存在布局关系的,而这就需要组件类布局来处理组件内自己特有的布 ...

  8. 《java入门第一季》之Math类一个小案例获取任意数值范围内随机数

    Math:用于数学运算的类. import java.util.Scanner; /* * 需求:请设计一个方法,可以实现获取任意范围内的随机数. * * 分析: * A:键盘录入两个数据. * in ...

  9. HTML入门笔记

    HTML简介 HTML是做网页最基本的技术 1_由标签组件 2_在任何操作系统平台,只要有浏览器,都有执行HTML 3_浏览器中有HTML解析器 4_编辑HTML可以使用任何文本编辑工具,如记事本,建 ...

  10. SpriteBuilder中节点位置类型为百分比时不能定位的解决

    Ball.ccb类型是Node,其中有个子节点为Color Node,其中物理使能. MainScene.ccb中加入一个物理节点,将Ball.ccb拖入其中,成为该物理节点的孩子,这时出现了一个&q ...