首页 > 编程语言 >python 装饰器

python 装饰器

时间:2022-10-12 22:34:56浏览次数:53  
标签:__ python ######################################################################

 

 

#######################################################################################################
#传统写法 ,主要功能和辅助功能写在一个函数内
####################################################################################################### import time def print_odds(): print("开始时间:",time.clock()) for i in range(100): if i%2 ==1: print(i) print("结束时间:",time.clock()) if __name__ == '__main__': print_odds() #######################################################################################################
#主要功能函数,辅助功能函数分离开的写法
#######################################################################################################
import time def count_time(func): #统计一个函数执行时间 start_time = time.clock() func() end_time = time.clock() print("总共用时:{}秒".format(end_time - start_time)) def print_odds(): #输出1-100之间的所有奇数 for i in range(100): if i%2==1: print(i) if __name__ == '__main__': count_time(print_odds) #######################################################################################################
#闭包函数写法 ,闭包函数: 一个函数,其参数和返回值都是函数

####################################################################################################### import time def print_odds(): #输出1-100之间的所有奇数 for i in range(100): if i%2==1: print(i) def count_time_wrapper(func): def improved_func(): start_time = time.clock() func() end_time = time.clock() print("总共用时:{}秒".format(end_time - start_time)) return improved_func if __name__ == '__main__': pp = count_time_wrapper(print_odds) #返回值是一个函数,pp 此时就是个函数 pp () #pp() 代表调用pp函数 #######################################################################################################

#装饰器写法

####################################################################################################### import time def count_time_wrapper(func): def improved_func(): start_time = time.clock() func() end_time = time.clock() print("总共用时:{}秒".format(end_time - start_time)) return improved_func @count_time_wrapper def print_odds(): #输出1-100之间的所有奇数 for i in range(100): if i%2==1: print(i) if __name__ == '__main__': print_odds() ####################################################################################################### #带参数装饰器 ####################################################################################################### import time def count_time_wrapper(func): def improved_func(*args,**kwargs): start_time = time.clock() ret = func(*args,**kwargs) end_time = time.clock() print("总共用时:{}秒".format(end_time - start_time)) return ret return improved_func def print_odds(lim=100): #输出1-100之间的所有奇数 cnt = 0 for i in range(lim): if i%2==1: #print(i) cnt = cnt +1 return cnt if __name__ == '__main__': print("增强前") print(print_odds()) #print(print_odds(lim=60)) print("-" * 100) print("增强后") ll = count_time_wrapper(print_odds) #ll() print(ll(lim=60)) print("-" * 100) ####################################################################################################### # 通用的闭包函数 ####################################################################################################### def general_wrapper(func): def improveed_func(*args,**kwargs): #接收函数参数 ret = func(*args,**kwargs) #传入参数并接收返回值 return ret return improveed_func

 

# #######################################################################################################
#
# #多个装饰器
#
# #######################################################################################################

def wrapper1(func1):
    print("第一个闭包")
    def improved_func1(func):
        print("在第一个闭包内调用函数")
    return improved_func1

def wrapper2(func2):
    print("第二个闭包")
    def improved_func2():
        print("在第二个闭包内调用函数")
    return improved_func2

@wrapper1
@wrapper2
def  oringinal_func():
    print("主功能函数")

if __name__ == '__main__':
    print("!" * 150)
    oringinal_func = wrapper2(oringinal_func)
    print(oringinal_func.__name__)
    print ("!" * 150)
    oringinal_func = wrapper1(oringinal_func)
    print(oringinal_func.__name__)

 

 

 

 

 

 

 

标签:__,python,######################################################################
From: https://www.cnblogs.com/chengxuyonghu/p/16786355.html

相关文章

  • python基础-较复杂数据类型预览
    1.初识列表  列表就是队列;  列表是一种有序的,且内容可重复的数据类型;  用list代表列表,也可以用list()定义一个列表,同时定义列表可以直接使用[];  python中列......
  • 有参装饰器及递归函数
    昨日内容回顾global与nonlocal关键字global 函数体内部调用全局名称空间内的变量。nonlocal 函数嵌套后,内部函数调用外部函数名称空间内的变量。闭包函数函数嵌套......
  • 多层装饰器
    目录今日内容概要今日内容详解多层语法糖有参装饰器装饰器模板装饰器修复技术递归函数今日内容概要多层语法糖有参装饰器装饰器模板装饰器修复技术递归函数今日内......
  • 多层语法糖、有参装饰器、及递归函数
    多层语法糖、有参装饰器、及递归函数目录多层语法糖、有参装饰器、及递归函数一、多层语法糖二、有参装饰器三、装饰器模板四、装饰器修复技术五、递归函数六、昨日作业详......
  • python中的运算函数
    1、abs(x)x的绝对值2、complex(re,im)返回一个复数,re是实部,im是虚部3、c.conjugate()返回c的共轭复数4、pow(x,y)计算x的y次方; pow(x,y,z)先计算x的y次方,然后结果在对z取余5、x......
  • 多层语法糖,有参装饰器,递归函数
    多层语法糖deffunc1(a1):#1定义了函数func1#14func1(foo2) print('加载了func1')#15加载了func1 deffoo1(*args,**kwargs): print('执行了foo1')......
  • 装饰器补充和递归函数
    装饰器补充和递归函数多层语法糖问题我们在写代码时可能会遇到同一个函数用多个语法糖来装饰,那么他们之间的关系是什么,怎么执行的就需要看一下下面这段代码了defoutter......
  • python基础之多层语法糖、函数递归
    python基础之多层语法糖、函数递归目录一、多层语法糖二、装饰器模版三、装饰器修复技术四、函数的递归调用1.函数的递归调用2.递归函数的定义3.递归函数的特点4.递归函数......
  • python 函数装饰器
    今日内容概要作业讲解多层语法糖问题有参装饰器装饰器修复技术递归函数算法之二分法今日内容详细多层语法糖defoutter1(func1):print('加载了outter1......
  • 多层语法糖、装饰器、递归函数
    多层语法糖、装饰器、递归函数目录多层语法糖、装饰器、递归函数一、多层语法糖二、有参装饰器三、装饰器模板1、最常用的无参装饰器2、不常用的有参装饰器四、装饰器修复......