013、变量的作用域

 

参考资料:https://www.jianshu.com/p/68f5ef6c3cee

LEGB法则

Python的变量名解析机制称为 LEGB 法则,这也是由作用域的命名而来的。

 

当在函数中使用变量时,Python搜索4个 作用域:本地作用域(L)、之后是上一层结构中的 def 或 lambda 的本地作用域(E),之后是全局作用域(G),最后是内置作用域(B)。
并且在第一处能够找到这个变量名的地方停下来。如果变量名在这次搜索中没有找到,Python 会抛出 NameError 异常。
 
  示例代码如下:
# global 语句是一个使用全局命名空间的声明,它告诉 Python 函数打算生成或修改一个或多个全局变量名。
# global 使得作用域查找跳过本地作用域从全局作用域开始,如果变量不存在将继续到内置作用域。

bb = 'hello'

def func():
    a = 100
    print(a)
    global bb       # 当需要改变全局变量bb的值时,使用global关键字
    bb = 'world'
    print(bb)


func()
View Code

  执行结果如下:

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day06\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day06/hh/test_02.py
100
world

Process finished with exit code 0
View Code

 

global 语句

在默认情况下,所有在一个函数中被赋值的变量都位于这个函数的本地作用域,并且仅在这个函数运行的过程中存在。为了在函数内创建或修改一个全局作用域的变量,需要使用 global 语句来声明使用全局作用域。

global 语句是一个使用全局命名空间的声明,它告诉 Python 函数打算生成或修改一个或多个全局变量名。global 使得作用域查找跳过本地作用域从全局作用域开始,如果变量不存在将继续到内置作用域。但是,对变量的赋值总是在全局作用域中创建或修改它们。


函数内部定义的变量,是局部变量。 定义,定义
 

 

posted @ 2021-07-28 11:45  空-山-新-雨  阅读(111)  评论(0编辑  收藏  举报