我是python的新手,我正在尝试运行一个程序的代码,但我陷入了这个部分,我需要一个始终保持返回新数据的函数,这里是一部分始终保持返回零的代码!
import time
def forloop():
for i in range(0,10000):
return i
while True:
time.sleep(0.25)
print(forloop())
答案 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