我试图在程序中进一步更改变量.我在程序开始时声明了一个全局变量,我想在程序中更改不同函数中的变量.我可以通过再次声明函数内部的变量来做到这一点,但我想知道是否有更好的方法来做到这一点.下面是一些测试代码来解释我的意思.
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)
Run Code Online (Sandbox Code Playgroud)
有任何想法,谢谢
我已经尝试了global变量,但是当我这样做时,项目变量仍然打印出YepNo而不是YepYES.我希望函数中的新变量pro改变变量中的project变量.
要注意,你多次做错了.
即使您可以使用全局语句来更改全局(由于最好使用函数参数和返回值,因此不建议这样做),这不会更改其他已分配的值.例如,即使您重新分配ID,也不会重新分配项目.另外:你的函数什么也没有返回,为它们的返回值指定一个名字是没有意义的,而且这是一个使用变量的全大写名称(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
Run Code Online (Sandbox Code Playgroud)
但最好的方法是不用全局变量:
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
Run Code Online (Sandbox Code Playgroud)
这将使所有代码交互清晰,并防止与全局状态更改相关的问题.
要更新可以使用的全局变量
global ID
ID="Yes"
Run Code Online (Sandbox Code Playgroud)
在将变量赋值给ID ="YES"之前
但是更改ID对项目变量没有影响project = ("Yep"+ID),因为项目已经是一个字符串
你需要做一个像这样的功能
def getprojectname(ID):
return project+ID
Run Code Online (Sandbox Code Playgroud)
整个计划可能是这样的
更新:......删除