簡體   English   中英

生成器,產量,發送python

[英]Generators, yield, send python

我收到了這個作業問題,參加了關於udemy的課程后,我仍然不知道該如何解決。 這是關於產量,下一步和發送。

這是我需要做的:指導:

  1. 使用itertools.permutations生成列表的所有排列,並將它們存儲在排列列表中
  2. 使用list.sort()對排列列表進行排序
  3. 遍歷排列列表時使用yield關鍵字
  4. 檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM