Python带参数的函数装饰器】的更多相关文章

# -*- coding: utf-8 -*- # author:baoshan # 带参数的函数装饰器 def say_hello(country): def wrapper(func): def deco(*args, **kwargs): if country == 'china': print('你好!') elif country == 'america': print('hello') else: return func(*args, **kwargs) return deco re…
写带参数的函数装饰器最纠结的是需要包好多层,最外层是接收参数的函数,它返回一个接收函数的的函数.但这样有个问题是,最终包装出来的装饰器必须加()调用一下,即使没有参数也需要这样做,因为调用这个最外层函数才能返回里面装饰器(就是接收函数的函数).以前一篇为例,可以这样改进: def opt_arguments(func): def meta_wrapper(*args, **kwargs): if len(args) == 1 and callable(args[0]): return func(…
# -*- coding: utf-8 -*- # author:baoshan # 带参数的类装饰器(和不带参数的类装饰器有很大的不同) # 类装饰器的实现,必须实现__call__和__init__两个内置函数. # __init__:不再接收被装饰函数,而是接收传入参数: # __call__:接收被装饰函数,实现装饰逻辑 class logger(object): def __init__(self, level='INFO'): self.level = level def __cal…
# -*- coding: utf-8 -*- # author:baoshan # 不带参数的类装饰器 # 类装饰器的实现,必须实现__call__和__init__两个内置函数. # __init__:接收被装饰函数:__call__:实现装饰逻辑 class logger(object): def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): print('[INFO]: the fu…
楔子 前提,我有一段代码(一个函数). import time def run_time(): time.sleep(0.1) print('我曾踏足山巅') 需求1:现在,我想计算这段代码的运行时间. 我可以这样做: import time def run_time(): start_time = time.time() time.sleep(0.1) print('我曾踏足山巅') end_time = time.time() run_t = end_time - start_time pr…
在不改变函数的结构的基础,我们给函数加新的功能,用是函数装饰器,如果要给函数传递参数,那么应该怎么做呢 @timerdef test2(name,age): time.sleep(3) print('name: %s age: %s' % (name, age)) test2('dongye',33) def timer(func): #是test2函数,高阶函数 def deco(*args,**kwargs):  start_time=time.time() func(*args,**kwa…
装饰器 什么是装饰器? 装饰:给已有的对象(函数)添加新的功能 器:工具              在python中指具备某些功能的函数 装饰器:装饰器就是一个给其他函数增加功能的函数 一种设计原则: 开闭原则:对扩展开放 对修改封闭 装饰器怎么用 我们用一个例子说明装饰器的作用及用法 例子: 现需要统计一段程序运行的时间 #统计程序运行时间,首先我们写一个程序 import time def index(): time.sleep(1) print('login') #以上就是一个打印logi…
装饰器 2018-10-25 13:49:37 装饰器从字面意思就是用来装饰的,在函数可以理解为:在函数中,我们不想影响原来的函数功能,又想给函数添加新的功能,这时候我们就用到了装饰器. 一般函数操作(不用装饰器): import time print(time.time()) def i_can_sleep(): time.sleep(3) start = time.time() i_can_sleep() stop = time.time() print("函数运行了%s"%(st…
装饰器 某公司的基础业务平台如下: def f1(): print('这是f1业务平台') def f2(): print('这是f2业务平台') def f3(): print('这是f3业务平台') def f4(): print('这是f4业务平台') def f5(): print('这是f5业务平台') 各业务部门是这样调用的: #f1业务部门调用f1() #f2业务部门调用f2() #f1业务部门调用f3() #f4业务部门调用f4() #f5业务部门调用f5()   随着公司的规模…
本章讨论的话题 python如何计算装饰器句法 python如何判断变量是不是局部的(通过函数内部是否给变量赋值过来判断是否是局部变量) 闭包存在的原因和工作原理(闭包是一种函数,它会保留定义函数时存在的自由变量的绑定,这样调用函数时,虽然定义作用域不可用了,但是仍能使用那些绑定.函数中的函数) nonlocal能解决什么问题(nonlocal是新出现的保留关键字,python3.0中引入)(将局部变量声明为自由变量) 探讨 实现行为良好的装饰器 标准库中有用的装饰器 实现一个参数化的装饰器 装…