我通过他们的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')
答案 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
随着您的体验水平的提高,您将开始认识到好的和坏的代码之间的区别,但您做了一个非常好的尝试。