python 协程小程序(草稿有待完善)
2016-01-27 18:59
781 查看
我的python学习笔记: 通常函数运行时需要使用一组输入参数,但是也可以把函数编写为一个任务,从而能处理发送给它的一系列输入。这类函数称为协程,可以使用yield语句并以表达式(yield)的形式创建协程。
def print_matches()matchtext: print ("Looking for ",matchtext) while True: line = (yield) if matchtext in line: print (line) 要使用这个函数,首先需要调用他,向前执行到第一条(yield)语句,然后使用send()给它发送数据。 >>>matcher = print_matches("python") >>>matcher.next #向前执行一条语句到(yield)语句 Looking for python #这条语句会被打印输出 >>>matcher.send("Hello World") >>>matcher.send("python is so cool") python is so cool #被打印输出 >>>matcher.send("oye") >>>matcher.close() #关闭匹配函数 使用send()为协程发送某个值之前,协程会暂时中止,此时,当发送某个值时,协程中的(yield)表达式会将这个值返回,接下来的语句就会处理,处理完毕后,就又会走到(yield)表达式,并且停止等待下一次的send()传值。
#description 下面这个小程序就像linux中命tail -f /var/log/messages一样,当运行时可以动态的显示文本文件里的信息哦!
import time import sys import os def tail(f): f.seek(0,2) #跳转到文本文件的最后的位置 while True: line = f.readline() if not line: time.sleep(0.1) continue yield line #匹配函数 def grep(lines,searchtext): for line in lines: if searchtext in line: yield line #协程 def print_match(matchtext): print('look for ',matchtext) while True: line = (yield) 当执行完print语句后程序会停留在(yield)这里,直到有send('hello')语句过来时会触发程序继续运行哦! if matchtext in line: print (line) matches = [ print_match('python'), print_match('love'), print_match('test') ] for m in matches: m.__next__() #让 print('look for ',matchtext)这条语句执行完毕
www = tail(open('F:\code\mytest')) #往这个文件里写些内容吧,只要每一行中包括python,love,test,这三个词任意一个就会将哪一行输出
line = grep( www ,'python') for lin in line: for m in matches: m.send(lin) 很好玩哦!
相关文章推荐
- python工具程序一、复制目录中指定扩展名的文件
- 细说python类3——类的创建过程
- 局部敏感哈希(原始LSH)python实现
- python安装tar.gz和whl模块
- Python import
- Python学习之路-初学篇之Python的基本数据类型(一)
- python excel操作
- 构建Python+Selenium2自动化测试环境<一>
- python 脚本查看微信把你删除的好友--win系统版
- python学习新得
- Python字符串笔录
- python 类的简单介绍
- Python 第八章 进程和线程
- day2 学习python 字符及字符串
- 模重复平方计算法(快速幂)【Python实现】<信安数论>
- Python & JSON
- Python2.7 读取中文,显示为乱码的问题
- ubuntu14.04 源码安装 Python2.7.11
- Black Hat python-2.1
- python Pillow 模块安装