如何在Python中更改全局变量
我想在程序的后面部分修改一个变量。我在程序开始时声明了一个全局变量,然后想在不同的函数中改变这个变量。我可以在函数内部重新声明这个变量,但我想知道有没有更好的方法来做到这一点。下面有一些测试代码来解释我的意思。
ID = 'No'
project = ("Yep"+ID) # ID added with 'No' value which I later want to change
def pro():
ID = "YES"
print ID
def pro1(ID):
# I could declare project again to get this to work, but I would like to avoid this
print project # I want this to print with the new ID number.
if __name__ == '__main__':
pro()
pro1(ID)
有没有人有什么想法,谢谢
我试过使用 global
变量,但这样做的时候,项目中的变量还是打印出 YepNo
,而不是 YepYES
。我希望函数 pro
中的新变量能够改变 project
变量的值。
6 个回答
使用 global
语句。
global 语句是一种声明,它在当前代码块中有效。它的意思是,后面列出的标识符(变量名)会被当作全局变量来处理。
举个例子: http://www.rexx.com/~dkuhlman/python_101/python_101.html#SECTION004340000000000000000
附注:
不过不要太频繁地使用 global
,可以参考这个视频 http://www.youtube.com/watch?v=E_kZDvwofHY#t=10m45
小心哦,你这样做错了好几次。
虽然你可以用 global 这个关键词来改变全局变量(不过不推荐这样做,因为用函数参数和返回值更好),但这并不会改变其他已经赋值的变量。比如说,虽然你重新给 ID 赋值,但项目(project)这个变量是不会被重新赋值的。另外,你的函数没有返回任何东西,所以给它们的返回值起个名字是没有意义的。而且,用全大写的名字(比如 ID)来命名变量是个坏习惯,因为通常全大写的名字是用来表示常量的。
这应该能让你更清楚全局变量是怎么工作的:
myid = ''
project = ("Yep"+myid) #ID added with no value which I later want to change
def mutate_id():
global myid
myid = "YES"
def mutate_project():
global project
project = ("YEP" + myid)
if __name__ == '__main__':
print "myid", myid
print "project ", project
print
mutate_id()
print "myid", myid
print "project ", project
print
mutate_project()
print "myid", myid
print "project ", project
print
但最好的方法是不要使用全局变量:
def get_new_id(old):
return "YES"
def get_new_project(old):
return ("YEP" + myid)
if __name__ == '__main__':
myid = ''
project = ("Yep"+myid)
print "myid", myid
print "project ", project
print
myid = get_new_id(myid)
print "myid", myid
print "project ", project
print
project = get_new_project(project)
print "myid", myid
print "project ", project
print
这样可以让所有代码之间的互动变得清晰,也能避免与全局状态变化相关的问题。
要更新全局变量,你可以使用
global ID
ID="Yes"
在把变量赋值给 ID = "YES" 之前
但是,改变 ID 对项目变量是没有影响的,project = ("Yep"+ID)
,因为 project 已经是一个字符串了
你需要写一个像这样的函数
def getprojectname(ID):
return project+ID
整个程序可能是这样的
更新:
... removed