python装饰器详解-笔记

本文详细解析了Python中的装饰器,包括作用域、高级函数、闭包和装饰器的概念及特性。介绍了装饰器如何实现不修改函数源代码和调用方式来增强功能,通过实例展示了无参和有参装饰器的用法,以及类装饰器的使用。
摘要由CSDN通过智能技术生成

一.作用域

在python中,作用域分为两种:全局作用域和局部作用域。

全局作用域是定义在文件级别的变量,函数名。而局部作用域,则是定义函数内部。

关于作用域,我们要理解两点:

a.在全局不能访问到局部定义的变量

b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改)

下面我们来看看下面实例:

x = 1
def funx():
    x = 10
    print(x)  # 打印出10

funx()
print(x) # 打印出1

如果局部没有定义变量x,那么函数内部会从内往外开始查找x,如果没有找到,就会报错

x = 1
def funx():
    print(x)  

funx()
print(x) # 打印出1

x = 1
def funx():
    def func1():
        print(x)  
    func1()

funx()
print(x) # 打印出1

因此,关于作用域的问题,只需要记住两点就行:

全局变量能够被文件任何地方引用,但修改只能在全局进行操作;如果局部没有找到所需的变量,就会往外进行查找,没有找到就会报错。
二.高级函数

我们知道,函数名其实就是指向一段内存空间的地址,既然是地址,那么我们可以利用这种特性来。
a函数名可以作为一个值
将函数作为字典值,实现文本数据的增删查改操作
b.函数名可以作为返回值

def outer():
    def inner():
        pass
    return inner

s = outer()
print(s)
######输出结果为#######
<function outer.<locals>.inner at 0x000000D22D8AB8C8>

c.函数名可以作为一个参数

def index():
    print("index func")

def outer(index):
    s = index
    s()
    
outer(index)
######输出结果#########

index func

所以满足上面两个条件中的一个,都可以称为高级函数.

三.闭包函数

闭包函数必须满足两个条件:1.函数内部定义的函数 2.包含对外部作用域而非全局作用域的引用

下面通过一些实例来说明闭包函

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白砌墙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值