使用Python进行迭代

时间:2018-06-28 09:55:42

标签: python

我已经在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)

3 个答案:

答案 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()