ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 概述 变量的生效范围(由其**所在位置**决定)称为作用域,又称**名称空间**(可见范围),python创建,查找变量名都是在名称空间中进行的。 函数定义了本地作用域,模块定义了全局作用域,此处的**全局作用域仅限于单个程序文件**。 变量的作用域越小,优先级越高,遵循LEGB法则 ## LEGB作用域查找原则 本地变量 --> 上层函数的作用域 --> 全局作用域 --> 内置作用域 ![](http://om4h63cja.bkt.clouddn.com/17-3-7/11113944-file_1488869174700_e428.jpg) >[success]global在修改全局作用域时使用,nolocal(python3)在修改上层函数作用域时使用 >[danger]全局作用域中的变量,在函数中默认只读,不能修改,修改应使用如下方法 在本地作用域中改变全局变量方法 ```python def f(): global x x = X ``` ## return * 结束函数 * 返回某个对象,返回多个对象时会封装成元组 * 默认返回None ## 最小化全局变量 在函数内部尽量避免修改全局变量。 python使用**多线程**进行并行计算实际上使用的全局变量,全局变量在并行线程中在不同函数之间成为了共享内存,扮演了**通讯工具**的角色。 ## 最小化文件间的修改 ```python # first.py X = 99 #second.py import first print(first.X) # 打印结果 first.X = 88 # 修改first.py结果 ``` 应避免上面这样的做法。**解决办法**:通过调用函数进行通信 ### 例子 ```python #first.py #!/usr/bin/env python X = 99 def setX(new): global X X = new # 修改全局变量 #second.py #!/usr/bin/env python import first print(first.X) first.setX(88) print(first.X) # 展示全局变量 #three.py #!/usr/bin/env python import first import second print(first.X) ``` 测试结果 ```python python three.py 99 88 88 ``` 其他访问全局变量的方法 ```python # m.py 模块名 var = 99 def local(): var = 0 def glob1(): global var var += 1 def glob2(): import m m.var += 1 def glob3(): import sys glob = sys.modules['m'] glob.var += 1 def test(): print(var) # local()不影响全局变 local();glob1();glob2();glob3(); print(var) ``` 测试结果 ```python >>> m.test() 99 102 >>> m.var 102 ```