[英]Generators, yield, send python
我收到了這個作業問題,參加了關於udemy的課程后,我仍然不知道該如何解決。 這是關於產量,下一步和發送。
這是我需要做的:指導:
itertools.permutations
生成列表的所有排列,並將它們存儲在排列列表中 list.sort()
對排列列表進行排序 yield
關鍵字 yield
語句是否獲得了輸入列表,如果是,則清空排列列表並重復步驟2 下面是我嘗試的代碼,它不支持send函數,並且繼續使用舊的LIST。
def permute(items):
permu_list = [perm for perm in pr(items)]
permu_list.sort()
for x in permu_list:
yield x
這是結果的典范:
>>> g = permute(['b', 'a', 'c'])
>>> next(g)
('a', 'b', 'c')
>>> next(g)
('a', 'c', 'b')
>>> g.send(['e', 'q', 'c'])
('c', 'e', 'q')
>>> next(g)
('c', 'q', 'e')
您可以在yield語句中獲取通過賦值發送的值。 喜歡:
received = yield something
對於您的用法,您需要額外的知識,您可以通過yield from
語句從其他生成器中獲益。 在您的情況下,您需要以下內容:
def permute(items):
permu_list = [perm for perm in pr(items)]
permu_list.sort()
for x in permu_list:
l = yield x
if l:
yield from permute(l)
break
在具有l = yield x
行中,如果您只是簡單地在生成器上調用next,那么我會收到已發送到該生成器的None
,因此您在此處接收到None
,所以我編寫了一個if語句來檢查它是否為None
值或它是來自send的值發電機的方法。
之后,我從獲得的同一生成器函數中創建並使用另一個生成器。 通過permute(l)
我創建了一個新的生成器,並通過yield from
該生成器的輸出作為輸出來yield from
,此后,我不想繼續從第一個列表中生成置換,因此我中斷了循環。
有關更多信息,您可以查看這篇分為兩部分的文章 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.