我已经在Python 2和3中进行了尝试。我要做的就是返回SERVERS中的元素:
SERVERS = ['APP 1','APP 2', 'APP3']
n = -1
def get_server():
n= -1
n += 1
return SERVERS[n % len(SERVERS)]
if __name__=="__main__":
get_server()
我的输出是:
APP1
我期望:
APP1
APP2
APP3
APP1
APP2
APP3
APP1
APP2
APP3
我在做什么错了?
我也尝试过这种方法,期望得到相同的结果,但是得到相同的意外结果:
cycle= itertools.cycle(SERVERS)
def get_server():
global cycle
return next(itertools.cycle(cycle))
x= get_server()
print (x)
答案 0 :(得分:0)
这在Python 3中有效:
SERVERS = ['APP 1', 'APP 2', 'APP3']
n = -1
def get_server():
global n
n += 1
return SERVERS[n % len(SERVERS)]
if __name__ == "__main__":
# the number (10) is how many output lines you want to print
for _ in range(10):
print(get_server())
答案 1 :(得分:0)
让我们空运行您提供的代码。 该程序从语句开始
Future.get()
它看到的下一条语句是函数调用
get()
它仅执行一次,因为它没有在循环或其他方法中进行迭代。
在get_server()函数内部,函数的前两行将全局变量n的值设置为0,即
if __name__=="__main__":
该函数然后返回SERVERS [n%len(SERVERS)]。在这里,
len(SERVERS)= 3
n = 0
因此,n%len(SERVERS)= 0%3 = 0
此返回调用要求函数返回SERVERS [0],在您的情况下为APP1,因此返回结果。
答案 2 :(得分:0)
尝试一下:
SERVERS = ['APP 1','APP 2', 'APP 3']
def get_server():
for i in SERVERS:
for i in SERVERS:
print(i)
if __name__ == "__main__":
get_server()