python基础装饰器_Python基础之装饰器

一、 什么是装饰器:

器即函数;

装饰即修饰,意指为其他函数添加新功能。

装饰器定义:本质就是函数,功能是为其他函数添加新功能。

二、装饰器需要遵循的原则:

1.不修改被装饰函数的源代码(开放封闭原则);

2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式。

三、无参装饰器:

不用传参数来使用装饰器。

以下的操作是为函数foo来增加新的计时功能:不改变原函数的代码和调用方式

import time #调用time模块

def timmer(func): #装饰器timmer,将函数foo的函数名为参数传给timmer

def wrapper():#嵌套函数

start_time = time.time()#开始时间

func() #func=函数foo 加括号函数直接被调用

stop_time = time.time() #结束时间

print("函数运行的时间是%s"%(stop_time-start_time))

return wrapper #返回wrapperde

@timmer #装饰器的语法@+装饰器名,foo = timmer(foo)

def foo(): #定义的一个无参函数

time.sleep(2) #使程序睡眠2s

print("welcome to beijing")

foo() #调用foo函数

---------------------以下是输出结果----------------------

welcome to beijing

函数运行的时间是2.0

四、有参装饰器:

要传参数来使用装饰器。

以下的操作是为函数my_max来增加新的计时功能,通过装饰器传的参数判断,执行对应的代码,实现相应的功能:

不改变原函数的代码和调用方式。

import time # 调用time模块

#定义装饰器阶段

def choice(x=1): #通过装饰器传的参数(默认为1),完成下面的判断,达到自己想要的状态

def timmer(func): # 嵌套函数

def wrapper(*args, **kwargs): # 接收参数

if x == 1: #当装饰器传的参数是1时,就启用计时功能

start_time = time.time() # 开始计时

func(*args, **kwargs) # func=函数my_max 加括号来调用函数

stop_time = time.time() # 结束计时

print("函数的运行时间是%s" % (stop_time - start_time))

elif x == 0: #当装饰器传的参数是0时,就不启用计时功能

func(*args, **kwargs) # func=函数my_max 加括号来调用函数

print("不用计时")

return wrapper # 返回wrapper

return timmer #返回timmer

#调用装饰器

@choice()#要加括号传参数运行函数的 #@timmer my_max=timmer(my_max)#为my_max这个函数增加计时功能

def my_max(x, y): # 比较两个数的大小

time.sleep(2) # 睡眠2s,方便实验效果

res = x if x > y else y # 判断x与y的大小

print("from the my_max,the max is %s" % res)

#调用函数阶段

my_max(1, 2) # 调用函数并按位置传参

-----------------------输出结果----------------------

from the my_max,the max is 2 #这是使用的默认参数的结果

函数的运行时间是2.0

#当@choice(0) 时

-----------------------输出结果----------------------

from the my_max,the max is 2 #choice传的参数是0的结果

不用计时

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值