我正在通过他们的API从一个在线平台访问来自不同帐户的数据。我已经创建了一个名为Account的类,它包含访问此API所需的所有信息。我希望能够设置帐户(以及获得访问权限所需的信息)每次在我提出API请求之前。我试图创建一个函数,将全局变量Acct设置为适当的account类实例,但在调用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')

最佳答案

抱歉,但是用这种方式使用全局变量通常不是一个好方法。您可能对编程还不熟悉,所以我不想让您觉得自己被“吓跑了”,但是让函数返回一个值,然后用如下语句设置全局变量会更明智

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

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

关于python - 如何在python中更改全局变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32145146/

10-13 01:17