簡體   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