2024-04-26 12:23:42 发布
网友
我对python有点陌生,我试图为一个程序运行一段代码,但我被困在这一部分,我需要一个总是返回新数据的函数,这里有一部分代码总是返回零!你知道吗
import time def forloop(): for i in range(0,10000): return i while True: time.sleep(0.25) print(forloop())
尝试使用全局变量跟踪函数在调用之间到达的位置:
counter = 0 def forloop(): global counter counter += 1 return counter
当您调用forloop()并在其中执行return i时,它将从函数返回,下次调用forloop()时,它将从头开始。您想使用的是生成器函数
forloop()
return i
您可以使用generator functions(使用yield语句)来生成值,而不是return。你知道吗
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异常,在这种情况下,我们将捕获该异常并重新创建生成器。你知道吗
next(x)
StopIteration
您的函数会立即返回,每次调用它时都会再次从0开始。你知道吗
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循环:
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))
尝试使用全局变量跟踪函数在调用之间到达的位置:
当您调用
forloop()
并在其中执行return i
时,它将从函数返回,下次调用forloop()
时,它将从头开始。您想使用的是生成器函数您可以使用
generator functions
(使用yield
语句)来生成值,而不是return
。你知道吗示例-
next(x)
如果生成器已耗尽,则抛出StopIteration
异常,在这种情况下,我们将捕获该异常并重新创建生成器。你知道吗您的函数会立即返回,每次调用它时都会再次从
0
开始。你知道吗可以使用常规函数执行任何操作;使用全局函数并不断递增:
但更好的方法是使用generator function:
你可以在循环中使用它:
标准库已经包含了这样一个生成器:^{} function 就是这样做的。与^{} function 一起,您几乎可以重新创建
while
循环:如果您想连续循环0到9999之间的值,那么您可以编写一个自定义生成器函数来执行以下操作:
您可以使用这个生成器:
相关问题 更多 >
编程相关推荐