您的位置:首页 > 编程语言 > Python开发

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)
很好玩哦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: