递归/面向过程编程
面向过程的编程思想:就是机械化的流水线,下一步要紧接着上一步的结果,才能运行下去。在设计时,需要把整个流程
设计出来。
面向过程的好处是:让程序简化复杂度,体系结构清晰。
面向过程的坏处是:针对性很强,耦合度很强,可扩展性很差。应用场景不易经常变化。
面向对象的案例:
#grep -rl 'root' /etc import os,time def wrapper(func): def inner(*args,**kwargs): res = func(*args,**kwargs) next(res) return res return inner @wrapper def search(target): """ 找到文件的绝对路径 target是生成器对象 :return: """ while True: dir_name = yield #协程函数表达式,将路径传给dir_name print('车间search开始生产产品:文件路径') time.sleep(2) g = os.walk(dir_name) for i in g: for j in i[-1]: file_path = '%s/%s' %(i[0],j) target.send(file_path) #将路径传出去。找到一个发一个。 # print(file_path) @wrapper def opener(target): """ 打开一个文件,获取文件的句柄。 :return: """ while True: file_path = yield #接到路径 print('车间opener开始生产产品:文件句柄') time.sleep(2) with open(file_path) as f: #接到文件路径,打开文件 target.send(f(file_path,f)) #send可以传多个值,但是要是元组的形式。 @wrapper def cat(target): """ 读取文件内容 :return: """ while True: file_path,f = yield #那到文件句柄,读文件 print('车间cat开始生产产品:文件内容') time.sleep(2) for line in f: #读文件。 target.send((file_path,line)) @wrapper def grep(pattern,target): """ 过滤一行内容里是否有关键字。 :return: """ while True: file_path,line = yield print('车间grep开始生产产品:文件关键字') time.sleep(2) if pattern in line: target.send(file_path) @wrapper def printer(): """ 打印有关键字的文件路径 :return: """ while True: file_path = yield print('车间printer开始生产产品:文件路径了') time.sleep(2) print(file_path) g = search(opener(cat(grep('python',printer())))) # next(g) g.send("/etc")
--------------- END --------------