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

相关文章
|
12天前
|
缓存 监控 程序员
Python中的装饰器:优雅而强大的函数修饰工具
在Python编程中,装饰器是一种强大的工具,能够在不修改原函数代码的情况下,为函数添加新的功能或行为。本文将深入探讨Python中装饰器的使用方法和实际应用,帮助读者更好地理解和利用这一重要的编程概念。
|
5天前
|
设计模式 缓存 监控
深入理解Python中的装饰器
装饰器是Python中的一项强大的功能,但对初学者来说可能会有些难以掌握。本文将通过具体的例子和详细的解释,帮助读者更好地理解和应用Python中的装饰器,从而提升代码的可读性和复用性。
|
5天前
|
测试技术 开发者 Python
Python中的装饰器:提升函数的灵活性和可重用性
在Python编程中,装饰器是一种强大的工具,它可以在不修改函数本身的情况下,动态地扩展函数的功能。本文将介绍装饰器的工作原理及其在实际开发中的应用,帮助读者更好地理解和利用这一特性。
|
2天前
|
开发者 Python
Python进阶:深入剖析闭包与装饰器的应用与技巧
Python进阶:深入剖析闭包与装饰器的应用与技巧
|
2天前
|
Python
Python深入讲解系列之装饰器
Python深入讲解系列之装饰器
|
8天前
|
数据安全/隐私保护 Python
Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。
【6月更文挑战第20天】Python装饰器是高阶函数,用于在不修改代码的情况下扩展或修改函数行为。它们提供可重用性、模块化和无侵入性的功能增强。例如,`@simple_decorator` 包装`my_function`,在调用前后添加额外操作。装饰器还能接受参数,如`@logged("INFO", "msg")`,允许动态定制功能。
16 6
|
12天前
|
程序员 测试技术 开发者
Python中的装饰器:优雅而强大的函数修饰工具
装饰器是Python中一种强大而优雅的工具,它可以在不修改原函数代码的情况下,对函数进行增强、扩展或者修改。本文将深入探讨Python中装饰器的基本概念、使用方法以及实际应用,帮助读者更好地理解和运用装饰器这一重要的编程技巧。
|
14天前
|
存储 缓存 Python
野生的Python装饰器案例
野生的Python装饰器案例
|
14天前
|
开发者 Python
Python进阶--装饰器
Python进阶--装饰器
|
18天前
|
缓存 开发者 Python
Python中的装饰器应用及性能优化
本文探讨了Python中装饰器的作用以及如何应用装饰器来提高代码的可读性和灵活性。同时,我们还将介绍一些性能优化的技巧,帮助开发者更好地理解和利用装饰器来提升Python程序的执行效率。