[英]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.