python 经验:不要在函数中给简单全局变量赋值,如果你使用from a import *
python 经验:不要在函数中给简单全局变量赋值,如果你使用from a import *
最近写 python 程序, 发现一个比较 trick 的地方
------------------------- a.py -------------------------
PWD = None
def func1():
global PWD
PWD="pwd"
print "PWD in func1 is: " + PWD
------------------------- b.py ------------------------
from a import *
func1()
print "PWD after call func1() is: " + str(PWD)
执行 python b.py 结果如下
PWD in func1 is: pwd
PWD after call func1() is: None
刚开始我认为在函数中给全局变量的赋予的值, 并不能传递回去, 就是说
global PWD 只是把全局变量的传递给局部变量 PWD, 而后用户都在对局部变量 PWD进行操作, 但并不是这样
看下面例子, 只是改了 import 语句
------------------------- b.py ------------------------
import a
a.func1()
print "PWD after call func1() is: " + str(a.PWD)
输出变为
PWD in func1 is: pwd
PWD after call func1() is: pwd
因此我推测 global 只能改本 module ( 此 py 文件 ) 中的全局变量
a.py 增加一个函数
------------------------- a.py ------------------------
PWD = None
def func1():
global PWD
PWD="pwd"
print "PWD in func1 is: " + PWD
def func2():
global PWD
print "PWD in func2 is: " + PWD
------------------------- b.py ------------------------
from a import *
print dir()
func1()
func2()
输出结果为
PWD in func1 is: pwd
PWD in func2 is: pwd
貌似我的结论成立:
global 只能改本 module ( 此 py 文件 ) 中的全局变量
但如果全局变量是 list 或 dict 类型, 就没有问题
------------------------- a.py ------------------------
GLIST = ["glist"]
def func1():
global GLIST
GLIST[0] = "glist changed"
------------------------- b.py ------------------------
from a import *
print GLIST[0]
运行 python b.py , 打印
glist changed
结论:
最好不要使用 "from a import *" 否则你会发现不能对简单全局变量赋值
相关内容
- 暂无相关文章
评论关闭