[英]python generator return "generator object" and not value
我写了一个生成器,但它没有执行(第 5 行没有在my_func
执行,但在第 17 行生成了一个生成器对象)。
在调试模式下,即使是调试器也没有在第 5 行执行第一个调试点。
我想知道我的代码如何在不进入相应函数my_func
情况下生成“生成器对象”。
我的代码:
import time
import os
def my_func(fileName,data):
print("generator Started") # line 5
with open(fileName,'r') as f:
for line in f:
data = line.split(",")
if data in (data[0]):
yield line
def calling_func():
start = time.time()
dirName = "D:\\Datasets"
filName = "data.txt"
fileName = os.path.join(dirName,filName)
keyword1 = 49
data = my_func(fileName,keyword1) # line 17
print(x for x in data)
print("time taken ----=>",(time.time() - start))
if __name__ == "__main__":
calling_func()
这就是生成器的确切用途。
从https://www.programiz.com/python-programming/generator :
如果一个函数至少包含一个
yield
语句(它可能包含其他yield
或return
语句),它就成为一个生成器函数。yield
和return
都会从函数返回一些值。
由于my_func
使用yield
该函数是一个生成器。
不同之处在于,当
return
语句完全终止一个函数时,yield
语句暂停该函数以保存其所有状态,然后在连续调用时从那里继续。
当您调用data = my_func(fileName,keyword1)
您创建了一个生成器(“生成器对象”)。
现在,当您在print(x for x in data)
迭代它时,每次迭代都会执行my_func
直到my_func
被排出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.