Python作为一种强大的编程语言,其函数作用域是其核心概念之一。在Python中,函数作用域有着一定的规则,即LEGB规则。LEGB是指Local、Enclosing、Global、Built-in四个作用域,这个规则非常重要,对于Python程序员来说,必须要了解它。一、Local作用域
Local作用域是函数内部定义的变量,只能在函数内部使用,函数外部不可见。如果函数内部和外部有相同的变量名,则函数内部的变量会覆盖函数外部的变量。
例如:
```
x = 10
def my_func():
x = 5
print("x in my_func:", x)
my_func()
print("x outside my_func:", x)
```
输出结果为:
```
x in my_func: 5
x outside my_func: 10
```
在my_func函数内部,我们定义了一个名为x的变量,它的值为5,这个变量只能在函数内部使用,函数外部不可见。在函数外部,我们定义了另一个名为x的变量,它的值为10,这个变量只能在函数外部使用,函数内部不可见。
二、Enclosing作用域
Enclosing作用域是指在函数内部嵌套函数的情况下,内部函数可以访问外部函数的变量。
例如:
```
def outer_func():
x = 5
def inner_func():
print("x in inner_func:", x)
inner_func()
outer_func()
```
输出结果为:
```
x in inner_func: 5
```
在outer_func函数内部,我们定义了一个名为x的变量,它的值为5,在inner_func函数内部,我们可以访问到这个变量。
三、Global作用域
Global作用域是指在函数外部定义的变量,可以在函数内部使用。如果函数内部和外部有相同的变量名,则函数内部的变量会覆盖函数外部的变量。
例如:
```
x = 10
def my_func():
print("x in my_func:", x)
my_func()
```
输出结果为:
```
x in my_func: 10
```
在my_func函数内部,我们没有定义名为x的变量,但我们可以访问到函数外部定义的x变量。
四、Built-in作用域
Built-in作用域是指Python内置的函数或模块中定义的变量和函数,例如print()、len()等函数。Built-in作用域的变量和函数可以在任何地方使用。
例如:
```
print("Hello, world!")
```
输出结果为:
```
Hello, world!
```
在这个例子中,我们使用了print()函数,它是Python内置的函数,我们可以在任何地方使用它。
综上所述,Python的函数作用域有四种,即Local、Enclosing、Global、Built-in四个作用域,它们的访问顺序遵循LEGB规则,即优先访问Local作用域,然后是Enclosing作用域、Global作用域和Built-in作用域。
文章