Python 模块内的全局变量
2017-06-14
全局变量
这里的全局变量说的都是模块内的全局变量
name = 'Yi_Zhi_Yu'
def test_a():
print(name)
test_a() # Yi_Zhi_Yu
这里的name
的 就是一个全局变量, 所以我们在模块的函数内可以直接打印
但如果在函数内修改name
的话, 会发生什么呢
ame = 'Yi_Zhi_Yu'
def test_a():
name = 'Tony'
print(name)
test_a() # Tony
print(name) # Yi_Zhi_Yu
可以看出在函数内对全局变量name
做修改的时候, name
变成了局部变量
, 但也仅限于函数内,
外部的全局变量
依旧没有改变
那有没有什么方式能在函数内修改全局变量?
global
关键字
global关键字
函数内的变量被声明为global
后, 对该变量的的修改就可以影响到全局变量
name = 'Yi_Zhi_Yu'
def test_a():
global name
name = 'Tony'
print(name)
test_a() # Tony
print(name) # Tony
可以看到全局变量被修改了
全局变量引入
c.py
文件里
name = 'Yi_Zhi_Yu'
def test_a():
global name
name = 'Tony'
print('test_a:{}'.format(name))
d.py 文件中
from c import name, test_a
import c
test_a()
print('c.name: {}'.format(c.name))
print('name: {}'.format(name))
运行d.py
, 在d.py
中的输出的两行应该是什么呢
可能有人会说是
c.name: Tony
name: Tony
也有人可能会说
c.name: Yi_Zhi_Yu
name: Yi_Zhi_Yu
然而事实上是
c.name: Tony
name: Yi_Zhi_Yu
在我们运行了test_a()
后, 该函数内的global name
被从Yi_Zhi_Yu
更改成了Tony
,
所以c.name
变成了 Tony
但通过from c imoprt name
的到的name, 却没有发生改变, 是因为什么
这个应该是因为通过from ... import ...
和 import ...
引入的变量, 一个属于原有模块的命名空间, 一个属于当前模块的命名空间, 在原有模块内, 通过global
对全局变量的修改, 也仅限于该命名空间
如上, from c import name
得到的name
属于d.py
这个文件模块的命名空间内, 而import c
得到的c.name
属于c
的命名空间, test_a
修改的也是c.py
文件模块的命名空间内的name
所以,
运行d.py
模块时, c.name
得到的是Tony
, name
得到的是Yi_Zhi_Yu