如何在python中更改全局变量?

时间:2015-08-21 16:24:08

标签: python

我通过他们的API访问来自在线平台的不同帐户的数据。我创建了一个名为Account的类,它包含访问此API所需的所有信息。我希望每次发出API请求之前都能设置帐户(以及获取访问权限所需的信息)。我试图创建一个函数,将一个全局变量Acct设置为正确的帐户类实例,但在我调用choose_account()之后,Acct继续返回'',是否有更好的方法来处理这种类型的过程?

Acct = ''
def choose_account():
    global Acct
    get = raw_input(r'Adap1, Adap2, Adap3, or Adap4? ')
    if get == 'Adap1':
        Acct = Adap1
    elif get == 'Adap2':
        Acct = Adap2
    elif get == 'Adap3':
        Acct = Adap3
    elif get == 'Adap4':
        Acct = Adap4
    else:
        print ("Please type Adap1, Adap2, Adap3, or Adap4 ")

编辑:显示帐户和Adap1等

class Account():

    def __init__(self, name, username, password, org_id):
        self.name = name
        self.username = username
        self.password = password
        self.org_id = org_id

    def update_pw(self, pw):
        self.password = pw 

Adap1 = Account('Adap1', 'username', 'password', 'org_id')

1 个答案:

答案 0 :(得分:4)

很抱歉,但以这种方式使用全局变量通常不是一个好方法。你可能不熟悉编程,所以我不希望你觉得自己正在被告知"但是如果函数返回它会更加明智 一个值,然后使用类似

的语句设置全局变量
Acct = choose_account()

在这种情况下,您的函数应该看起来更像这样(未经测试的代码):

def choose_acct():
    while True:
        get = raw_input(r'Adap1, Adap2, Adap3, or Adap4? ')
        if get == "Adap1":
            return Adap1
        elif get == "Adap2":
            return Adap2
        elif get == "Adap3":
            return Adap3
        elif get == "Adap4":
            return Adap4

更好的是,您可以考虑采用数据驱动的方法解决问题,并定义类似

的字典
adict = {"Adap1": Adap1, "Adap2": Adap2, "Adap3": Adap3, "Adap4": Adap4}

然后你的功能可以读取(再次,未经测试)

def choose_acct():
    while True:
        get = raw_input(r'Adap1, Adap2, Adap3, or Adap4? ')
        result = adict.get(get, None)
        if result:
            return result

随着您的体验水平的提高,您将开始认识到好的和坏的代码之间的区别,但您做了一个非常好的尝试。