python3---装饰器

本文详细介绍了Python3中的装饰器,包括装饰器的定义、如何使用同一个装饰器处理多个函数,以及如何实现计时器和用户权限判断等功能。还通过实例探讨了如何创建和组合多个装饰器,并讲解了带参数的装饰器的应用。
摘要由CSDN通过智能技术生成

装饰器的定义

把一个函数当作参数,返回一个替代版的函数
本质上就是一个返回函数的函数

在不改变原函数的基础上,给函数增加功能
def outer(func):
   def inner(age):
       if age<0:
           age = 0
       func(age)
   return inner

@outer	   # 语法糖,相当于 say = outer(say)
def say(age):
    print('man is %s years old' %age)

# say = outer(say)
say(-1)

在这里插入图片描述

装饰器的应用

多个函数使用一个装饰器

 def desc(fun):  # 需要传递一个函数,要装饰的函数
    def add_info():  # 装饰器函数里要嵌套函数
        print('元旦快乐~')
        fun()				# 执行装饰函数里面的函数对象
        print('欢迎光临西部开源~')
    return add_info    # 返回值是嵌套的函数对象

@desc   # 如何调用装饰器(两种方式)
def login():
    print('login....')

# login = desc(login)  # 返回值是一个函数
# login()
@desc
def logout():
    print('logout...')

@desc
def savemoney():
    print('存钱...')

@desc
def transfermoney():
    print('转账...')


login()
logout()
savemoney()
transfermoney()

在这里插入图片描述

装饰器实现一个计时器

import time
import string
import random
import functools

li = [random.choice(string.ascii_letters) for i in range(10)]


# 问题1:装饰的函数有返回值
# 问题2:如何保留被装饰函数的函数名和帮助信息文档
def timeit(fun):
    """这是一个装饰器timeit"""

    @functools.wraps(fun)  # 可以保留被装饰函数的函数名和帮助信息文档
    def add_time(*args, **kwargs):  # 接收可变参数和关键字参数
        """这是一个add_time函数"""
        # 在函数执行之前计时
        start_time = time.time()
        # 执行函数
        # 函数有返回值时,将函数赋给res
        res &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值