列表和生成器表达式
正文
1 协程函数的应用
写一个装饰器用于让协程函数不需要输入再执行一次next()函数
分析: 在装饰器中生成该协程函数的生成器, 并且执行一次next()函数
具体描述如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'weihuchao' def firstNext(func): def wrapper( * args, * * kwargs): g = func( * args, * * kwargs) next (g) return g return wrapper @firstNext def eater(name): print ( "{} start to eat" . format (name)) food_list = [] while True : food = yield food_list print ( "{} eat {}" . format (name, food)) food_list.append(food) g = eater( "egon" ) print (g.send( "包子" )) print (g.send( "炸酱面" )) |
2 面向过程编程
实现 grep -rl 'python' c:/test 的功能
一个函数实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'weihuchao' import os def search(dir_name, partten): g = os.walk(dir_name) res = {"",} for i in g: for j in i[ - 1 ]: file_path = i[ 0 ] + "\\" + j with open (file_path) as f: for line in f: if partten in line: res.add(file_path) for line in res: if line: print (line) search( "c:\\test" , "python" ) |
利用生成器来处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'weihuchao' import os def firstNext(func): def wrapper( * args, * * kwargs): g = func( * args, * * kwargs) next (g) return g return wrapper @firstNext def search(target): while True : dir_name = yield g = os.walk(dir_name) for i in g: for j in i[ - 1 ]: file_path = i[ 0 ] + "\\" + j target.send(file_path) @firstNext def opener(target): while True : file_path = yield with open (file_path) as f: target.send((file_path, f)) @firstNext def cat(target): while True : file_path, f = yield for line in f: target.send((file_path, line)) @firstNext def grep(partten, target): while True : file_path, line = yield if partten in line: target.send(file_path) @firstNext def printer(): while True : file_path = yield print (file_path) g = search(opener(cat(grep( "python" ,printer())))) g.send( "c:\\test" ) |
3 列表生成式, 生成器表达式
列表生成式的具体形式
列表 = [处理变量形成列表元素 for循环 if判断 for循环2]
等同于
for循环
if判断
for循环
元素=表达式
列表.append(元素)
生成器表达式是 列表生成式的中括号编程圆括号
其中获得的是一个生成器
可以通过 list(获得的生成器) 来快速生成一个列表
4 声明式编程
声明式编程主要是注重于定义, 不具体去了解实现
Python中有很多封装好的方法, 如reduce和map等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步