Python LEGB作用域与闭包、装饰器深度解析

0 下载量 133 浏览量 更新于2024-08-31 收藏 84KB PDF 举报
"本文主要探讨了Python中的变量作用域规则LEGB,并通过示例代码解释了这一概念。同时,文章还介绍了闭包和装饰器的相关知识,包括装饰器的普通写法及其接受参数的方式。" 在Python编程语言中,变量的作用域规则通常被称为LEGB,这四个字母分别代表Local(局部)、Enclosing(嵌套)、Global(全局)和Built-in(内置)。这些词首字母缩写形成了变量查找顺序: 1. Local(局部):在函数内部定义的变量,只在该函数内部可见。 2. Enclosing(嵌套):在函数或类定义内部定义的非局部变量,即闭包内的变量。 3. Global(全局):在所有函数外部定义的变量,整个程序都可以访问。 4. Built-in(内置):Python提供的内建名称,如`print`、`len`等。 闭包是一种特殊的函数,它在函数内部定义了一个新的函数,并可以访问外部函数的局部变量。即使外部函数执行完毕,闭包仍然能够记住这些变量的值。闭包在实现数据隐藏和功能封装方面有重要作用。 装饰器是Python中的一个重要特性,它允许我们在不修改原函数代码的情况下,增加或扩展函数的功能。装饰器本质上就是一个接收函数作为参数并返回新函数的函数。在Python中,装饰器通常使用`@`符号进行标记。例如: ```python def out(func): def inner(*args, kwargs): print("we are checking", args[0]) return func(*args, kwargs) return inner @out def check_2019_nCov(name): return f"now, {name} is very healthy" ``` 上述代码中,`out`是一个装饰器,它接收一个函数`func`,然后返回一个新的函数`inner`。当使用`@out`装饰`check_2019_nCov`函数时,实际调用的是经过`out`装饰后的新版本。 如果需要给装饰器传递参数,可以通过额外的外部函数来实现。这个外部函数接收参数,然后返回装饰器函数。例如: ```python def get_param(*args, kwargs): def out(func): def inner(*args, kwargs): print("get params", args, kwargs) return func(*args, kwargs) return inner return out @get_param("youge") def check_2019_nCov(name): return f"now, {name} is very healthy" ``` 在这个例子中,`get_param`函数接收参数,然后返回`out`装饰器。这样,我们就可以在定义装饰器时传递参数,从而实现对装饰器功能的定制。 理解LEGB规则、闭包和装饰器是掌握Python高级特性和编写更高效代码的关键。它们提供了在不同作用域管理变量以及扩展函数功能的能力,使得代码更加灵活和模块化。