python--有参装饰器、迭代器】的更多相关文章

1.有参装饰器 模板: def auth(x): def deco(func): def timmer(*args,**kwargs ): res = func(*args,**kwargs ) return timmer return deco 例子: import timecurrent_user={'user':None}def auth(engine='file'): def deco(func): def wrapper(*args,**kwargs): if current_user…
简单点就是这种 def deco2(param=1): def _deco2(fun): def __deco2(*args, **kwargs): print (param) fun(*args, **kwargs) return __deco2 return _deco2 @deco2 # 错误的写法 def f2(strx): print (strx) f2('hello') 运行上面这个,期待打印1和hello 实际上是不会打印任何东西的,因为@deco2后面忘了加括号,这样就悲剧了,把…
1. 装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能 开放封闭原则:对修改封闭,对扩展开放 import time def timmer(fun): start_time=time.time() fun() end_time=time.time() def fun1(): print("in func1")…
装饰器: 定义:本质是函数(装饰其它函数) 为其它函数添加附加功能 原则: 1 不能修改被装饰函数源代码    2 不修改被装饰函数调用方式 实现装饰器知识储备: 1 函数即‘’变量‘’ 2 高阶函数 a 把一个函数名当实参传给另外一个函数(在不修改被装饰函数的情况下 为其添加功能) b 返回值中包含函数名(不修改函数的调用方式) 3嵌套函数 高阶函数 + 嵌套函数 => 装饰器 简单版高阶函数 import time def bar(): time.sleep(3) print('in the…
需求:想要在test_func函数前后执行一些代码   1.第一步(定义函数,将调用原函数,使用新函数替换) def test_func(): return 'test_func' def test_wrapper_func(): print 'before' rt = test_func() print 'after' return rt print test_wrapper_func() 2.第二步(原函数可以定义参数) def test_func(): return 'test_func'…
叠加装饰器: 叠加装饰器 - 每一个新的功能都应该写一个新的装饰器 - 否则会导致,代码冗余,结构不清晰,可扩展性差 在同一个被装饰对象中,添加多个装饰器,并执行. @装饰1 @装饰2 @装饰3 def 被装饰对象(): pass 注意: 装饰器在调用被装饰对象时才会执行添加的功能. - 叠加装饰器: - 装饰的顺序: 由下到上装饰 - 执行的顺序: 由上往下 注意: 无论inner中出现任何判断,最后都要返回“调用后的被装饰对象” func(*args, **kwargs) def wrapp…
复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰器:装饰器名就是外层函数 @outer @outer  # fn = outer(fn) def fn(): pass 今日内容 1.带参装饰器  |  2.wrapper  |  3.可迭代对象 |   4.迭代器对象  |  5.for 迭代器工作原理 |  6.枚举对象…
目录: 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递,它的应用形式也被称为高阶函数,函数的特性如下: a. 可以被引用 # def foo(): # print('from foo') # # func = foo # print(foo) # 不加括号为foo函数的内存地址 # print(func) # func指向foo内存地址 # func(…
wraps模块 让原函数保留原来的说明信息 import time import random from functools import wraps def auth(func): '''auth information''' @wraps(func) def auth_user(): func() return auth_user @auth def web(): '''web information''' time.sleep(random.randrange(1,5)) print('w…
有参装饰器的引入: import time import random from functools import wraps def timmer(func): @wraps(func) def wrapper(): # wrapper.__doc__=func.__doc__ start_time = time.time() func() stop_time = time.time() print('run time is %s' % (stop_time-start_time)) # wr…