python装饰器详细分解讲解

简介: python装饰器详细分解讲解

一.作用域
在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)

输出结果为

.inner at 0x000000D22D8AB8C8>
c.函数名可以作为一个参数

//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM2NjgzNg==.html
def index():
print("index func")

def outer(index):
s = index
s()

outer(index)

输出结果

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

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

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

实例一:以下仅仅在函数内部定义了一个函数,但并非闭包函数.

def outer():
def inner():
print("inner func excuted")
inner() # 调用执行inner()函数
print("outer func excuted")
outer() # 调用执行outer函数
//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM2ODM0NA==.html

输出结果为

inner func excuted
outer func excuted
实例二:以下在函数内部定义了一个函数,而且还引用了一个外部变量x,那么这个是闭包函数么?答案:不是

x = 1
def outer():

def inner():
    print("x=%s" %x)  # 引用了一个非inner函数内部的变量
    print("inner func excuted")
inner()  # 执行inner函数
print("outer func excuted")

outer()

输出结果

x=1
inner func excuted
outer func excuted
在回头来看看对闭包函数的定义,是不是两条都满足?聪明的你,一定发现不满足第二条.对,这里的变量x,是属于全局变量,而非外部作用于域的变量。再来看看下面例子:

def outer():
x = 1
def inner():
print("x=%s" %x)
print("inner func excuted")
inner()
print("outer func excuted")

outer()

输出结果

x=1
inner func excuted
outer func excuted

相关文章
|
9月前
|
测试技术 Python
Python装饰器:为你的代码施展“魔法”
Python装饰器:为你的代码施展“魔法”
400 100
|
9月前
|
缓存 Python
Python装饰器:为你的代码施展“魔法
Python装饰器:为你的代码施展“魔法
532 88
|
10月前
|
缓存 测试技术 Python
解锁Python超能力:深入理解装饰器
解锁Python超能力:深入理解装饰器
236 2
|
10月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
395 101
|
10月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
564 98
|
10月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
325 99
|
10月前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
10月前
|
存储 缓存 测试技术
理解Python装饰器:简化代码的强大工具
理解Python装饰器:简化代码的强大工具
|
10月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
646 0

推荐镜像

更多