如何在Python中更改变量

chr*_*ley 4 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)
Run Code Online (Sandbox Code Playgroud)

有任何想法,谢谢

我已经尝试了global变量,但是当我这样做时,项目变量仍然打印出YepNo而不是YepYES.我希望函数中的新变量pro改变变量中的project变量.

Ala*_*oni 6

要注意,你多次做错了.

即使您可以使用全局语句来更改全局(由于最好使用函数参数和返回值,因此不建议这样做),这不会更改其他已分配的值.例如,即使您重新分配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)

这将使所有代码交互清晰,并防止与全局状态更改相关的问题.


YOU*_*YOU 6

要更新可以使用的全局变量

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)

整个计划可能是这样的

更新:......删除

  • 我认为这个例子的代码风格非常糟糕......即使你回答这个问题,你也会鼓励编程不当. (2认同)