[英]Understanding nested yield / return in python
我在 python 中有一個 function ,其 output 是一個發電機:
def main_function(x):
r = get_range()
for i in range(r):
yield x+i
我想重構代碼(我已經簡化了用例,但實際計算可能更復雜且更長。請參閱下面的編輯)。 根據我的理解,這是我應該做的以保持功能不變:
(a) 與原始代碼相同的界面
def sub_function(x,r):
for i in range(r):
yield x+i
def main_function(x):
r = get_range()
return sub_function(x,r)
與其他方法相比:
(b) 這將返回一個生成器的生成器(這種方法有什么優點嗎?)
def sub_function(x,r):
for i in range(r):
yield x+i
def main_function(x):
r = get_range()
yield sub_function(x,r)
(c) 這會破壞生成器的目的(對嗎?)
def sub_function(x,r):
return [x+i for i in range(r)]
def main_function(x):
r = get_range()
for i in sub_function(x,r):
yield(i)
編輯:評論指出正確的答案取決於用例。 我想補充一點,我的用例是解析 XML 文件以提取字段並將它們寫入數據庫。 這部分委托給 sub_function()。 我還問了這個問題,以大致了解嵌套 yield 用於重構代碼的用法。
你是對的; 最初的例子和 a) 做同樣的事情,因為兩者都返回一個生成器。
b) 不同:它返回一個生成單個元素的生成器(這是另一個生成器)。 要使用它,您需要兩個循環(一個在外部生成器上,一個在內部生成器上)。
本身沒有優勢,但有時,構建嵌套生成器可能很有用。
c) 可能會更糟,但我很確定[x for x in y]
實際上也是作為生成器實現的。 所以它有點貴,但不是那么多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.