总是返回新数据的函数

2024-04-26 12:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python有点陌生,我试图为一个程序运行一段代码,但我被困在这一部分,我需要一个总是返回新数据的函数,这里有一部分代码总是返回零!你知道吗

import time

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

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

Tags: 数据函数代码inimport程序运行truefor
3条回答

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

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

当您调用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异常,在这种情况下,我们将捕获该异常并重新创建生成器。你知道吗

您的函数会立即返回,每次调用它时都会再次从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)

标准库已经包含了这样一个生成器:^{} function就是这样做的。与^{} 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))

相关问题 更多 >