首页 > 代码库 > day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数
day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数
基础篇
本章大纲:
协程函数
递归函数
递归函数
匿名函数lambda
内置函数map reduce filter max min zip sorted
匿名函数lambda和内置函数结合使用
面向过程编程与函数编程
模块与包的使用
re模块内置函数
一,协程函数
注意:函数先定义,后使用。这是函数第一原则。函数主要分为定义,调用
1.1,什么是协程函数
协程函数特点:yield变为表达式,可以通过g.send(value)传值,用send传值时协程函数需要初始化,也可以说是生成器函数的一种
1.2,协程函数的初识
def eater(name): print(‘%s 开始吃了‘ %name) while True: food=yield print(‘%s开始吃%s‘%(name,food)) g=eater(‘alex‘) next(g)
断点分析为什么需要next()
第一步用next作用:
a,因为yeild的原因程序肯定是暂停的。只有next程序才能执行。
b,而send是先发送一个值给yeild然后在next,显然程序都不能开始了。从何说起接收send发送的值呀。所以第一步next让程序先走到yeild停等待send发值状态
第二步send作用:
a,通过send把值发送给暂停的yeild
b,当yeild接收到了send发送的值,他会自动next()一次生成器
1.3,通过yeild表达式保存协程函数状态
def eater(name): print(‘%s 开始吃了‘ %name) list1=[] while True: food=yield list1 print(‘%s开始吃%s‘%(name,food)) list1.append(food) g=eater(‘alex‘) next(g) res=g.send(‘苹果‘) res=g.send(‘橘子‘) res=g.send(‘香蕉‘) print(res)
1.4通过装饰器解决协程函数第一次next问题
def zhuangshi(func): def neibu(*args,**kwargs): g=func(*args,**kwargs) next(g) return g return neibu @zhuangshi #eater=neibu def eater(name): print(‘%s 开始吃了‘ %name) list1=[] while True: food=yield list1 print(‘%s开始吃%s‘%(name,food)) list1.append(food) g=eater(‘alex‘) res=g.send(‘苹果‘) res=g.send(‘橘子‘) res=g.send(‘香蕉‘) print(res)
1.5 利用yeild实现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)
二,递归函数
2.1,什么是递归函数 递归调用顾名思义即在函数内部调用函数(自己调用自己),通常用它来计算阶乘,累加等
2.2,递归函数计算1-100
2.3,递归函数的递归层级问题
2.4,怎么避免递归层级过问题
2.5,递归函数优化方向尾递归
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
Python介绍
day05 协程函数,递归函数,匿名函数lambda,内置函数map reduce filter max min zip sorted,匿名函数lambda和内置函数结合使用,面向过程编程与函数编程,模块与包的使用,re模块内置函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。