ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

34.Python:装饰器

2021-06-25 14:32:42  阅读:162  来源: 互联网

标签:index return Python wrapper 34 time print 装饰 def



"""
储备知识点
*args,**kwargs
名称空间与作用域
函数对象
函数的嵌套定义
闭包函数

无参装饰器

有参装饰器
"""
# 1.*args,**kwargs


# def index(x, y):
# print(x, y)
#
#
# def wrapper(*args, **kwargs):
# index(*args, **kwargs)
#
#
# wrapper(y=222, x=111)

# 2.名称空间与作用域:名称空间的“嵌套”关系是在函数的定义阶段,即检测语法的时候确定的

# 3.函数对象:
# 可以把函数当做参数传入
# 可以把函数当做返回值返回

# def index():
# return 123
#
#
# def foo(func):
# return func
#
#
# res = foo(index)
# print(res)
# print(res())

# 4.函数的嵌套定义
# def outter():
# def wrapper():
# pass
# return wrapper

# 闭包函数
# def outter(x):
# def wrapper():
# print(x)
# return wrapper
#
#
# f1 = outter(1)
# f1()


----装饰器介绍
"""
1.什么是装饰器
装饰器指的是定义一个函数,该函数用来装饰其他函数,为其他函数添加功能

2.为何要使用装饰器
开放/封闭原则
开放:指的是对拓展功能是开放的
封闭:指的是对修改源代码是封闭的

在不修改被装饰对象源代码以及调用方式的前提下为被装饰对象添加新功能

3.如何使用装饰器

"""
import time
from functools import wraps

# def index(x, y):
# time.sleep(3)
# print('welcome %s %s' % (x, y))
#
#
# def home(name):
# time.sleep(2)
# print('welcome %s to home' % name)
# return 123
#
#
# def outter(func):
# def wrapper(*args, **kwargs):
# start = time.time()
# res = func(*args, **kwargs)
# stop = time.time()
# print(stop - start)
# return res
# return wrapper
#
#
# index = outter(index)
# index(111,222)
#
# home = outter(home)
# res = home('SEPIA')
# print('返回值==>', res)

# 语法糖
# 在被装饰对象正上方单独一行写@装饰器名字


def timmer(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
res = func(*args, **kwargs)
stop = time.time()
print(stop - start)
return res

return wrapper


@timmer
def index(x, y):
"""这是主页功能"""
time.sleep(3)
print('welcome %s %s' % (x, y))


@timmer
def home(name):
time.sleep(2)
print('welcome %s to home' % name)
return 123


index(111, 222)
home('SEPIA')
print(index.__name__)
print(index.__doc__)

标签:index,return,Python,wrapper,34,time,print,装饰,def
来源: https://www.cnblogs.com/wyless/p/14930747.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有