15. Python开发--协程函数(yield表达式形式,装饰器)
2017-06-05 21:06
344 查看
#yield的语句形式: yield 1
#yield的表达式形式: x=yield
#协程函数
def deco(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
next(res) #此处可以是res.send(None)
return res
return wrapper
@deco
def eater(name):
print('%s ready to eat' %name)
food_list=[]
while True:
food=yield food_list
food_list.append(food)
print('%s start to eat %s' %(name,food))
g=eater('alex')
# print(g)
# next(g) #等同于 g.send(None)
#
# g.send('手指头')
# g.send('脚指头')
# g.send('别人的手指头')
# g.send('别人的脚指头')
# print(g)
print(g.send('脚趾头1'))
print(g.send('脚趾头2'))
print(g.send('脚趾头3'))
#x=yield
#g.send('1111'),先把1111传给yield,由yield赋值给x
# 然后再往下执行,直到再次碰到yield,然后把yield后的返回值返回
表达式形式的yield应用实例,实现linux的命令
#grep -rl 'python' /root
import os
def init(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
next(res)
return res
return wrapper
@init
def search(target):
while True:
search_path=yield
g=os.walk(search_path)
for par_dir,_,files in g:
for file in files:
file_abs_path=r'%s\%s' %(par_dir,file)
# print(file_abs_path)
target.send(file_abs_path)
@init
def opener(target):
while True:
file_abs_path=yield
# print('opener func==>',file_abs_path)
with open(file_abs_path,encoding='utf-8') as f:
target.send((file_abs_path,f))
@init
def cat(target):
while True:
file_abs_path,f=yield #(file_abs_path,f)
for line in f:
tag=target.send((file_abs_path,line))
if tag:
break
@init
def grep(target,pattern):
tag=False
while True:
file_abs_path,line=yield tag
tag=False
if pattern in line:
tag=True
target.send(file_abs_path)
@init
def printer():
while True:
file_abs_path=yield
print(file_abs_path)
x=r'C:\Users\Administrator\PycharmProjects\python17期\day5\a'
g=search(opener(cat(grep(printer(),'python'))))
print(g)
g.send(x)
'''
面向过程的程序设计:是一种流水线式的编程思路,是机械式
优点:
程序的结构清晰,可以把复杂的问题简单
缺点:
1 扩展性差
应用场景:
1 linux内核,git,httpd
'''
#yield的表达式形式: x=yield
#协程函数
def deco(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
next(res) #此处可以是res.send(None)
return res
return wrapper
@deco
def eater(name):
print('%s ready to eat' %name)
food_list=[]
while True:
food=yield food_list
food_list.append(food)
print('%s start to eat %s' %(name,food))
g=eater('alex')
# print(g)
# next(g) #等同于 g.send(None)
#
# g.send('手指头')
# g.send('脚指头')
# g.send('别人的手指头')
# g.send('别人的脚指头')
# print(g)
print(g.send('脚趾头1'))
print(g.send('脚趾头2'))
print(g.send('脚趾头3'))
#x=yield
#g.send('1111'),先把1111传给yield,由yield赋值给x
# 然后再往下执行,直到再次碰到yield,然后把yield后的返回值返回
表达式形式的yield应用实例,实现linux的命令
#grep -rl 'python' /root
import os
def init(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs)
next(res)
return res
return wrapper
@init
def search(target):
while True:
search_path=yield
g=os.walk(search_path)
for par_dir,_,files in g:
for file in files:
file_abs_path=r'%s\%s' %(par_dir,file)
# print(file_abs_path)
target.send(file_abs_path)
@init
def opener(target):
while True:
file_abs_path=yield
# print('opener func==>',file_abs_path)
with open(file_abs_path,encoding='utf-8') as f:
target.send((file_abs_path,f))
@init
def cat(target):
while True:
file_abs_path,f=yield #(file_abs_path,f)
for line in f:
tag=target.send((file_abs_path,line))
if tag:
break
@init
def grep(target,pattern):
tag=False
while True:
file_abs_path,line=yield tag
tag=False
if pattern in line:
tag=True
target.send(file_abs_path)
@init
def printer():
while True:
file_abs_path=yield
print(file_abs_path)
x=r'C:\Users\Administrator\PycharmProjects\python17期\day5\a'
g=search(opener(cat(grep(printer(),'python'))))
print(g)
g.send(x)
'''
面向过程的程序设计:是一种流水线式的编程思路,是机械式
优点:
程序的结构清晰,可以把复杂的问题简单
缺点:
1 扩展性差
应用场景:
1 linux内核,git,httpd
'''
相关文章推荐
- Python基础(9)_生成器(yield表达式形式)、面向过程编程
- python--表达式形式的yield、面向过程编程、内置函数
- python--生成器:yield的表达式形式,send
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
- Day04 - Python 迭代器、装饰器、软件开发规范
- python之yield与装饰器
- python开发学习-day04(迭代器、生成器、装饰器、二分查找、正则)
- python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式
- 插件和过滤器装饰器开发中的感悟-python-django
- Python开发基础-Day7-闭包函数和装饰器基础
- Python开发笔记之正则表达式的使用
- python之yield表达式学习
- Python开发基础-Day9-生成器、三元表达式、列表生成式、生成器表达式
- Python 3 中生成器函数yield表达式的使用
- 12. Python开发--装饰器
- yield表达式, 四种形式
- Android开发学习笔记之通过API接口将LaTex数学函数表达式转化为图片形式
- python之yield表达式学习
- Python-开发之路-装饰器&多层装饰器简介
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化