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

时间:2018-10-14 12:20:06

标签: python debugging generator

我写了一个生成器,但是没有执行(第5行没有在my_func中执行,而是在第17行生成了一个生成器对象)。
在调试模式下,即使调试器也没有执行第5行的第一个调试点。

enter image description here

我想知道我的代码如何在不进入相应功能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()

1 个答案:

答案 0 :(得分:0)

这是生成器的确切目的

来自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被终止为止。

相关问题