闭包和装饰器

闭包

定义:

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

优点:为变量续命
缺点:浪费内存

  • 接下来我们定义一个简单的闭包
# 外函数
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、付费专栏及课程。

余额充值