Python(72)_生成器函数与装饰器复习
Posted sunnybowen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python(72)_生成器函数与装饰器复习相关的知识,希望对你有一定的参考价值。
1 装饰器复习,注意打印的顺序
#-*-coding:utf-8-*- import os import time ‘‘‘ 语法糖 ‘‘‘ def wrapper(f): # 装饰器函数 ,f是被装饰的函数 def inner(*args,**kwargs): # 定义了内部函数,一定和return inner对应 ‘‘‘ 在被装饰函数执行前要做的事情‘‘‘ print(‘在被装饰函数执行前要做的事情‘) ret = f(*args,**kwargs) # 这句话是真正函数的执行 ‘‘‘ 在被装饰函数执行后要做事情‘‘‘ print(‘在被装饰函数执行后要做事情‘) return ret return inner @wrapper #装饰器函数 相当于 func = wrapper(func) def func(day): # 被装饰的函数 time.sleep(0.01) print(‘全体放假%s天‘%day) return ‘好开心‘ print(func(10))
2 聚合与散
def outer(*args,**kwargs): print(args) # 元组 (1, 3, 5, 6) print(*args) # 1 3 5 6 *在print函数里能用,打散。和传参的*作用的等价的 def inner(*args): # 聚合成1234 print(‘inner:‘,args) #(1, 3, 5, 6) inner(*args) outer(1,3,5,6) # = outer(*[1,2,3, 4]) #outer(*[1,2,3, 4])
3 普通函数
#-*-coding:utf-8-*- import os import time ‘‘‘ 生成器函数 ‘‘‘ def generator(): print(1) return ‘a‘ ret = generator() print(ret)
4、生成器的定义
#-*-coding:utf-8-*- import os import time ‘‘‘ 生成器函数 1、含有yield关键字的函数 2、yield不能和return共用,且需要写在函数内部 ‘‘‘ def generator(): print(1) yield ‘a‘ # 生成器函数执行后会得到一个生成器作为返回值 <generator object generator at 0x7f794e030200> ret = generator() print(ret) # ret.__next__() 迭代器 ,迭代器一般不同,用for循环就可以了 print(ret.__next__()) # 触发生成器里面的代码
5、for循环与迭代器和生成器的关系
#-*-coding:utf-8-*- import os import time ‘‘‘ 生成器函数 1、含有yield关键字的函数 2、yield不能和return共用,且需要写在函数内部 3、yield和next配合,迭代器,生成器 ‘‘‘ def generator(): print(1) yield ‘a‘ print(2) yield ‘b‘ yield ‘c‘ # 生成器函数执行后会得到一个生成器作为返回值 <generator object generator at 0x7f794e030200> ret = generator() # 这是生成器,上面是生成器函数 print(ret) # ret.__next__() 迭代器 ,迭代器一般不同,用for循环就可以了 # print(ret.__next__()) # 触发生成器里面的代码 # print(ret.__next__()) # print(ret.__next__()) for i in ret: print(i)
6、哇哈哈函数
def wahaha(): for i in range(2000): yield ‘哇哈哈%s‘%i g = wahaha() # 生成器 count = 0 for i in g: count +=1 print(i) if count >50: break; print(‘*******‘,g.__next__())
7、方法 __name__ 与 __doc__
def wahaha(): ‘‘‘ 一个打印哇哈哈的函数 :return: ‘‘‘ for i in range(2000): yield ‘哇哈哈%s‘%i g = wahaha() # 生成器 count = 0 for i in g: count +=1 # print(i) # if count >50: # break; print(‘*******‘,g.__next__()) print(wahaha.__name__) print(wahaha.__doc__)
8、方法 __name__ 与 __doc__ 升级
#-*-coding:utf-8-*- import os import time from functools import wraps ‘‘‘ ‘‘‘ def wrappper(func): @wraps(func) # 固定的,func传进去 def inner(*args,**kwargs): print("前") ret = func(*args,**kwargs) print("后") return ret return inner @wrappper # 不可少! def holiday(day): ‘‘‘ 这是一个放假通知 :param day: :return: ‘‘‘ print(‘全体放假%s天‘%day) return ‘好开心‘ holiday(10) print(holiday.__name__) print(holiday.__doc__)
以上是关于Python(72)_生成器函数与装饰器复习的主要内容,如果未能解决你的问题,请参考以下文章
python-flask复习—— 装饰器的坑及解决办法flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件重定义错误页面)
python学习第四天,列表生产式,匿名函数,生成器,内置函数,迭代器,装饰器,json和pickle的序列化和反序列化