我正在通过他们的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/