繁体   English   中英

python生成器返回“生成器对象”而不是值

[英]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语句(它可能包含其他yieldreturn语句),它就成为一个生成器函数。 yieldreturn都会从函数返回一些值。

由于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM