Python教程

34.Python:装饰器

本文主要是介绍34.Python:装饰器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
"""
        储备知识点
            *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__)
这篇关于34.Python:装饰器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!