始终保持返回新数据的功能

时间:2015-07-18 10:44:43

标签: python python-3.x

我是python的新手,我正在尝试运行一个程序的代码,但我陷入了这个部分,我需要一个始终保持返回新数据的函数,这里是一部分始终保持返回零的代码!

import time

def forloop():
  for i in range(0,10000):
    return i

while True:
  time.sleep(0.25)
  print(forloop())

3 个答案:

答案 0 :(得分:1)

您的功能会立即返回,每次调用时,您都会再次从0开始。

你可以用常规功能做你想做的事;使用全局并继续增加:

_counter = -1
def increasing():
    global _counter
    _counter += 1
    return counter

更好的想法是使用generator function

def increasing():
    counter = 0
    while True:
        yield counter
        counter += 1

你可以在循环中使用它:

for count in increasing():
    print(count)
    time.sleep(0.25)

标准库已经包含了这样一个生成器:itertools.count() function就是这样做的。与next() function一起,您几乎可以重新创建while循环:

from itertools import count

counter = count()

while True:
    time.sleep(0.25)
    print(next(counter))

如果你想连续循环遍历值0到9999,那么你就编写了一个自定义生成器函数来实现这一点:

def count_to_9999_and_restart():
    while True:
        for i in range(10000):
            yield i

你可以使用那个生成器:

counter = count_to_9999_and_restart()

while True:
    time.sleep(0.25)
    print(next(counter))

答案 1 :(得分:1)

当您拨打forloop()并在其中执行return i时,它会从该功能返回,下次您致电forloop()时,它将从头开始。您想要使用的是生成器函数

您可以使用generator functions(使用yield语句)来生成值,而不是return

示例 -

def forloop():
  for i in range(0,10000):
    yield i

x = forloop()
while True:
   try :
       time.sleep(0.25)
       print(next(x))
   except StopIteration:
       x = forloop()
如果生成器已用尽,则

next(x)会抛出StopIteration异常,在这种情况下,我们会捕获该异常并重新创建生成器。

答案 2 :(得分:-2)

尝试使用全局变量来跟踪调用之间函数的位置:

counter = 0
def forloop():
  global counter
  counter += 1
  return counter