优草派  >   Python

详解Python函数作用域的LEGB顺序

李明            来源:优草派

Python作为一种强大的编程语言,其函数作用域是其核心概念之一。在Python中,函数作用域有着一定的规则,即LEGB规则。LEGB是指Local、Enclosing、Global、Built-in四个作用域,这个规则非常重要,对于Python程序员来说,必须要了解它。一、Local作用域

Local作用域是函数内部定义的变量,只能在函数内部使用,函数外部不可见。如果函数内部和外部有相同的变量名,则函数内部的变量会覆盖函数外部的变量。

详解Python函数作用域的LEGB顺序

例如:

```

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作用域。

文章

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行