Python装饰器

闭包

外部函数嵌套内部函数,外部函数返回内部函数,内部函数可以访问外部函数的变量

import time


def time_cost(f):
    def calc():
        statr = time.time()
        f()
        print(f'函数{f.__name__}消耗{time.time() - statr}')

    return calc


import random

data = [random.randint(0, 10000) for i in range(10000)]
data2 = data.copy()


@time_cost
def my():
    data.sort()
    print(data)

# my = time_cost(my)
my()


@time_cost  # 相当于把me()变成实参赋给time_cost  等效于me = time_cost(me)
def me():
    new_list = sorted(data2)
    print(new_list)

# me = time_cost(me)
me()

 通过外包给函数加功能。

装饰器

装饰器(Decorator)是 Python 中一种特殊的函数,主要用来修改其他函数的功能。装饰器本质上是一个高阶函数,它接受一个函数作为输入,并返回一个新的函数作为输出。

在 Python 中,装饰器通常用于在不改变原函数代码的情况下,给函数添加额外的功能或者修改原函数的行为。这种方法使得代码更加简洁和易于维护,也符合 Python 的“开放封闭”原则,即对扩展是开放的,对修改是封闭的。

装饰器广泛应用于日志记录、性能测试、事务处理、缓存、权限校验等场景,它们使得这些功能可以与业务逻辑分离,提高了代码的可读性和可维护性。

总结来说,装饰器是 Python 中一种强大的编程工具,可以动态修改函数或类的功能,同时保持代码简洁和可复用。

装饰器案例

user = None


def my(f):
    def me():
        global user
        if user:
            f()
        else:
            while True:
                username = input('请输入用户名')
                password = input('请输入密码')
                if username == 'a' and password == '1':
                    user = username
                    f()
                    break
                else:
                    print('用户名或密码错误')
    return me


def index():
    print('我是首页')

index()


def center():
    print('我是个人中心')

center = my(center)
center()
# @my
def cart():
    print('我是购物车')

cart()

给个人中心和购物车加权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值