最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python装饰器原理与用法分析

来源:动视网 责编:小采 时间:2020-11-27 14:12:23
文档

Python装饰器原理与用法分析

Python装饰器原理与用法分析:这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考,具体如下:1、装饰器的本质是函数,主要用来装饰其
推荐度:
导读Python装饰器原理与用法分析:这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考,具体如下:1、装饰器的本质是函数,主要用来装饰其


b、返回值中包含函数名

[对装饰器的影响]:达到“不改变函数的调用方式“的效果

import time
def bar():
 time.sleep(3)
 print('in the bar')
def test2(func):
 print('新添加的功能')
 return func
bar=test2(bar)
bar()

运行结果:

新添加的功能
in the bar

(3) 嵌套函数:在一个函数体内用def去声明一个新的函数(不是调用)

def foo():
 print('in the foo')
 def bar(): #声明一个新的函数,而不是调用函数
 print('in the bar')
 bar()
foo()

运行结果:

in the foo
in the bar

4、装饰器的语法:高阶函数+嵌套函数=》装饰器 (下面的例子可以用pycharm的调试器调试一下,看看代码的运行顺序)

import time
def timer(func):
 def deco(*args,**kwargs):#使用了不定参数
 start_time=time.time()
 res=func(*args,**kwargs) #运行函数
 stop_time=time.time()
 print('运行时间:',stop_time-start_time)
 return res # 若无返回值,则返回None
 return deco
@timer #等价于test1=timer(test1)=deco,即test1()=deco()
def test1():
 time.sleep(3)
 print('in the test1')
@timer #等价于test2=timer(test2)=deco,即test2(name)=deco(name)
def test2(name):
 time.sleep(3)
 print('in the test2',name)
test1()
print('-------------分界线------------------------')
test2('Tomwenxing')

运行结果:

in the test1
运行时间: 3.00017197955322
-------------分界线------------------------
in the test2 Tomwenxing
运行时间: 3.000171422958374

5、带参数的装饰器

# -*- coding:utf-8 -*-
user,passwd='Tomwenxing','123'
#如装饰器带参数,一般是三层嵌套
def auth(auth_type): #第一层的参数是装饰器的参数
 def outer_wrapper(func):#第二层的参数是装饰器要装饰的目标函数
 def wrapper(*args,**kwargs):#第三次的参数是目标函数的参数
 if auth_type=='local':
 username = input('Username:').strip()
 password = input('Password:').strip()
 if user == username and passwd == password:
 print('用户Tomwenxing已经成功登录!')
 res = func(*args, **kwargs) #运行目标函数
 return res
 else:
 exit('用户名或密码有错误')
 elif auth_type=='ldap':
 print('暂不支持这种登录方式!')
 return wrapper
 return outer_wrapper
def index():
 print('欢迎来到index页面')
@auth(auth_type='local') #home=wrapper()
def home(name):
 print('%s,欢迎来到home页面' %name)
 return 'This is home page'
@auth(auth_type='ldap')
def bbs():
 print('欢迎来到bbs页面 ')
index()
print('----------------------分界线-------------------')
print('函数的返回值为:',home('wenxing'))
print('----------------------分界线-------------------')
bbs()

运行结果:

欢迎来到index页面
----------------------分界线-------------------
Username:Tomwenxing
Password:123
用户Tomwenxing已经成功登录!
wenxing,欢迎来到home页面
函数的返回值为: This is home page
----------------------分界线-------------------
暂不支持这种登录方式!

文档

Python装饰器原理与用法分析

Python装饰器原理与用法分析:这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下本文实例讲述了Python装饰器原理与用法。分享给大家供大家参考,具体如下:1、装饰器的本质是函数,主要用来装饰其
推荐度:
标签: 用法 分析 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top