标签:cts 返回 赋值 target 装饰器 面向 arm line return
上节课内容回顾:
一、闭包函数
1.定义在函数内部的函数
2.该内部函数包含对外部作用域而不是对全局作用域的引用【f2()就是闭包函数】
def fi(): x = 1 def f2(): print(x) reyurn f2 f = f1() f()
二、装饰器
1.为什么要有装饰器:
开发封闭原则,对扩展开发的,对修改是封闭的。
2.什么是装饰器:
装饰器本身--》可以是任意可调用对象(列如:函数)
被装饰的对象--》也是任意可调用对象
3.装饰器要遵循的原则:
不修改被装饰器对象的源代码
不修改被装饰对象的调用方式
装饰器语法:
@deco #func = deco(func) def func() pass
-----------------------------------------05day课程-------------------------------------------------
一、空装饰器:
def deco(fcun): def wrapper(*args,**kwargs): res = fcun(*args,**kwargs) return res return wrapper
二、协程函数
1.表达式yield的使用方式
装饰器负责--初始化功能
#!/usr/bin/python # -*- coding:utf-8 -*- # Author:zhaosj ##################装饰器####################### def deco(fcun): def wrapper(*args,**kwargs): res = fcun(*args,**kwargs) next(res) # next(res)==return res return res return wrapper ################表达式yield的使用#################### @deco # 装饰器的作用负责初始话 def eater(name): print(‘%s ready to eat‘ %name) while True: food = yield # 表达式yield的使用 print(‘%s start to eat %s‘ %(name,food)) g = eater(‘alex‘) g.send(‘手指头‘) #send 给yield传了个值【send==next】
运行结果:
2.表达式yield的使用方式
#!/usr/bin/python # -*- coding:utf-8 -*- # Author:zhaosj # 表达式yield的说明 # x = yield # g.send(‘1111‘),先把1111传给yield,由yield赋值给x,然后在往下执行。 # 直到再次遇到yield,然后把yield后的返回值返回 ##################装饰器####################### def deco(fcun): def wrapper(*args,**kwargs): res = fcun(*args,**kwargs) next(res) # next(res)==return res return res return wrapper ################表达式yield的使用#################### @deco # 装饰器的作用负责初始话 def eater(name): print(‘%s ready to eat‘ %name) food_list = [] #空列表接收yield返回值 while True: food = yield food_list # 表达式yield的使用 food_list.append(food) print(‘%s start to eat %s‘ %(name,food)) g = eater(‘alex‘) print(g.send(‘手指头1‘)) #send 给yield传了个值【send==next】 print(g.send(‘手指头2‘))
运行结果:
三、yield与面向过程式函数:
模拟一个linux系统下命令为 # grep -lr ‘python‘ /root
目录结构:【找出文件中带有python字符的文件并打印】
---递归寻找---
!/usr/bin/python # -*- coding:utf-8 -*- # Author:zhaosj import os # 模拟一个linux系统下命令为 # grep -lr ‘python‘ /root #######################装饰器函数(负责每一次传一个空值)################# 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) target.send(file_abs_path) @init def opener(target): while True: file_abs_path = yield 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 for line in f: target.send((file_abs_path,line)) @init def grep(target,pattern): while True: file_abs_path,line = yield if pattern in line: target.send(file_abs_path) @init def printer(): while True: file_abs_path = yield print(file_abs_path) x = r‘D:\PycharmProjects\day_05\a‘ g = search(opener(cat(grep(printer(),‘python‘)))) print(g) #打印结果就是一个生成器 g.send(x)
运行结果:
面向过程的程序设计:是一种流水线式的编程思路,是机械式;
优点:程序的结构清晰,可以把复杂的问题简单化
缺点:扩展性差;
【C语言没有面向对象的说法,只有面向过程】
面向过程式---应用场景
1.linux内核;2.git;3.httpd;
标签:cts 返回 赋值 target 装饰器 面向 arm line return
原文地址:http://www.cnblogs.com/eedweek/p/6935235.html