闭包与装饰器的区别

本文深入探讨了Python中的闭包概念,包括其定义、优缺点及应用场景。通过示例解释了如何在外函数中定义内函数并返回内函数对象,以此实现闭包。同时,文章介绍了装饰器的定义,它是利用闭包思想来扩展函数功能的工具。展示了如何创建和使用装饰器,以及装饰器在实际代码中的执行顺序。最后,通过一个装饰器应用示例展示了如何使用装饰器增强函数功能。

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

闭包

内外函数嵌套
内部函数引用外部函数作用域下的非全局变量
外函数返回内函数对象,这种内外函数嵌套的方式就是闭包

优点:为变量续命

缺点:浪费内存


# 外函数
def outer(num1, num2):
	# 内函数
	def inner():
		# 内函数返回外函数作用域下的非全局变量
		return num1 * num2
	# 外函数返回内函数对象
	return inner
 
# 调用
# outer(1, 5)()


print(outer(1, 5)())

装饰器

Python装饰器就是用于拓展原来函数功能的一种函数,利用了闭包的思路, 
目的是在不改变原函数名(或类名)的情况下,给函数增加 新的功能。

def outer1(func):
    # func是被装饰的函数
    def inner(*args, **kwargs):
    	# *args, **kwargs  接收任意参数
        print("装饰器1代码1")
        return func(*args, **kwargs)
        print("装饰器1代码2")
    return inner
 
 
def outer2(func):
    def inner(*args, **kwargs):
        print('装饰器2代码1')
        return func(*args, **kwargs)
        print('装饰器2代码2')
    return inner
 
 
# 通过@装饰器名 使用
@outer1
@outer2
def func():
    print('函数执行')
 
# 调用装饰的函数
func()
 
# 执行的顺序
"""
装饰器1代码1
装饰器2代码1
函数执行
装饰器2代码2
装饰器1代码2
"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值