请你举一个LEGB原则的例子并说明
时间: 2023-07-31 14:12:54 浏览: 44
好的,LEGB原则是Python语言中变量作用域的规则,它分别代表Local、Enclosing、Global和Built-in四个作用域。举一个例子:
```python
x = 10 # 全局变量
def func():
y = 5 # 局部变量
print("y =", y) # 输出局部变量y的值
print("x =", x) # 输出全局变量x的值
func()
```
在这个例子中,变量x被定义为全局变量,在函数内部也可以访问。变量y被定义为局部变量,只能在函数内部访问。当函数被调用时,首先查找局部作用域,即函数内部定义的变量,如果找不到则查找嵌套作用域,即包含当前函数的外层函数中定义的变量。如果还找不到,则查找全局作用域,即全局变量。如果最终还是找不到,则查找内置作用域,即Python内置函数中定义的变量。在这个例子中,变量y只存在于函数内部,所以只能在函数内部访问。而变量x既可以在函数内部访问,也可以在函数外部访问,因为它是全局变量。
相关问题
大佬,我有个问题,Python里面函数为什么不用定义类型和修饰符,并且一旦定义了一个变量就是全局变量
Python是一种动态类型语言,它允许变量在运行时被赋予不同的数据类型,因此不需要在定义函数时指定类型。此外,Python的设计哲学是简单明了,因此省略了修饰符这一概念。至于变量作用域,Python采用了LEGB规则,即Local、Enclosing、Global、Built-in四个作用域,因此一旦定义了一个变量,它的作用域就是当前的作用域,而不是全局变量。
python全局作用域中的代码能使用局部作用域中的变量
在 Python 中,全局作用域中的代码可以使用局部作用域中的变量,但反过来则不行。这是因为 Python 中的作用域规则是基于 LEGB 原则的,即 L (local)、E (enclosing)、G (global) 和 B (built-in),在查找变量时按照这个顺序查找。
当在一个函数中定义变量时,这个变量属于局部作用域。如果函数中的代码要使用一个变量,Python 首先在局部作用域中查找这个变量,如果找不到,就会在上一级作用域(即函数的外层作用域)中查找,直到找到为止。如果到全局作用域都没有找到这个变量,就会抛出 NameError 异常。
而在全局作用域中定义的变量,不能在局部作用域中直接使用,需要使用 `global` 关键字进行声明,表示使用的是全局变量。