【python】(二十) python装饰器

本文介绍了Python中的函数引用、闭包函数以及装饰器的概念与应用。通过实例展示了装饰器如何提高代码的可读性和可维护性,并提供了装饰带参数函数的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1. 函数引用

  • 函数可以被引用
  • 函数可以被赋值给一个变量
def hogwarts():
    print("hogwarts")

harry = hogwarts  #将hogwarts赋值给harry变量
harry()  # <==> hogwarts()

"""
hogwarts:没有括号是函数对象
hogwarts():有括号是函数调用
"""

2. 闭包函数

闭包函数:函数里面套函数这种形式的函数,一般就是闭包函数

闭包函数示例:

#闭包函数
def output_student(grade):
    def inner(name, gender):
        print(f"霍格沃兹开学啦!学生的名称是{name},性别是{gender},年级是{grade}")
    return inner # 调用output_stundent后,inner函数对象会被返回

student = output_student(1)  #相当于对student进行了inner函数对象的赋值操作
student("罗恩", "男") #对inner进行调用,传inner函数需要的参数
student("哈利", "男")
student("赫敏", "女")

闭包函数特性:

  • 闭包的内部函数中,对外部作用域的变量进行引用
  • 闭包无法修改外部函数的局部变量
  • 闭包可以保存当前的运行环境

3. python装饰器

3.1 为什么要学习装饰器

  • 行业需求: 涉及 Python 技术栈,面试常见题
  • 使用需求: 优化代码的可读性,可维护性

3.2 装饰器示例

函数体开始执行与结束执行的时候分别添加打印信息。

  1. 以下不使用装饰器的代码,可读性比较差,也不容易理解,且使用起来不灵活。
# 不使用装饰器的代码
def timer(func):
    print("计时开始")
    func()
    print("计时结束")

def hogwarts():
    print("霍格沃兹")

timer(hogwarts)
#可读性比较差
  1. 使用装饰器代码,可读性增加,使用也比较灵活。
# 使用装饰器的代码
def timer(func):
    def inner():
        print("计时开始")
        func()
        print("计时结束")
    return inner

@timer
def hogwarts():
    print("霍格沃兹")

hogwarts()

3.4 装饰带参数函数

实现一个计时器的装饰器,计算函数的执行时间

import datetime
#装饰器函数
def timer(func):
    #使用不定长参数,这样可以在未确定被装饰函数的参数数量时,避免出现报错。
    def inner(*args, **kwargs):
        # 获取当前时间
        start_time = datetime.datetime.now()
        func(*args, **kwargs)
        end_time = datetime.datetime.now()
        print(f"函数的执行时间{end_time-start_time}")
    return inner  #将inner函数对象return出去

#被装饰函数
@timer
def hogwarts(name):
    print("霍格沃兹", name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值