加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

装饰器

发布时间:2020-12-17 00:23:39 所属栏目:Python 来源:网络整理
导读:h1 id="装饰器"装饰器 h2 id="什么是装饰器"什么是装饰器 装饰器是用来给某个功能添加新功能的工具。装饰器本身可以是任意可调用的对象,被装饰的对象也可以是任意可调用的对象。 想要在不修改功能源代码以及调用方式的前提下为原功能添加新功能。 装饰器是

<h1 id="装饰器">装饰器
<h2 id="什么是装饰器">什么是装饰器

装饰器是用来给某个功能添加新功能的工具。 装饰器本身可以是任意可调用的对象,被装饰的对象也可以是任意可调用的对象。

想要在不修改功能源代码以及调用方式的前提下为原功能添加新功能。

装饰器是闭包函数的应用 闭包函数=函数对象+函数嵌套定义+作用域 闭包函数指的是定义在函数内部的函数,并且该内部函数包含对外层函数作用域名称的引用。闭包函数

import time
def index():
    print('welcome to index page')
    time.sleep(3)
    return 'something'

def outter(func):
def wrapper():
start=time.time()
res=func()
end=time.time()
print(' process run time is %s' %(end-start))
return res
return wrapper

index=outter(index)
res = index()
print(res)


<h1 id="无参装饰器">无参装饰器

编写一个计算程序运行时间的装饰器

import time
@outter
def index(name):
    print('from %s'%name)
    time.sleep(2)

def outter(func):
def wrapper(*args,*kwargs):
start=time.time()
func(
args,**kwargs)
end=time.time()
print('run time is %s'%(end-start))
return wrapper
index()

无参数装饰器模板

def outter(func):
    def wrapper(*args,**kwargs):
        res=func(*args,**kwargs)
        return res
    return wrapper

import time

login_userinfo = {'userinfo': None}

def outter(name='zz'):
def auth(func):
def wrapper(*args,kwargs):
if login_userinfo['userinfo'] is not None:
res = func(*args,*kwargs)
input_user = input('username>>>')
input_passwd = input('password>>>')
if input_user == name and input_passwd == 'abc':
print('login successful')
login_userinfo['userinfo'] = input_user
res = func(
args,
kwargs)
return res
return wrapper
return auth

@outter(name='szz')
def index(name):
print('this is %s' % name)
time.sleep(2)
return 'something'

print(index('index'))

装饰器的用途就是为了在不改变源代码的基础上添加新的功能,或者需要接收新的变量,要么直接传值给函数,要么运用闭包的原理,内层函数可以对外层函数作用域的引用,把要传的值用函数包起来传下去。

global关键字的用途是把局部变量声明为全局变量,可以在函数内部修改全局变量 nonlocal关键字是把局部变量声明为上一层的作用域

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读