2017-04-21 62 views
2

所以,這裏是一個Python表達式:表達式「a = f()的產出」是什麼意思?

a = yield from f() 

是什麼意思?它可以在哪裏使用? f應該是什麼樣的對象?表達式評估後a的值是多少?

這裏有幾個問題上的計算器了Python的yieldyield from,但我沒有找到一個答案。

我明白了yield x,y = yieldy = yield x的含義。即使yield from f()或多或少都可以理解。但a = yield from f()是我意想不到的。

UPDATE:

B.巴比提供正確的答案。儘管如此,我仍然需要以不同的方式來闡述它。

語義表達a = yield from f()的是非常相似的一個函數調用:的a值會是什麼f()回報。但是,如果f()產生任何東西,所產生的值將被轉發到「上一級」(您只能在函數內寫入a = yield from f(),這將使您運行一個生成器)。如果在此之後「上一級」將值發回給您的發電機,則該值將被轉發至f()並且f()將繼續。

yield from允許f()和「上層」在您的函數運行時進行通信。

我想現在我明白這個yield from是什麼,希望這個解釋對別人有幫助。

回答

2

根據the documentation

  • f應該是一個發生器(這是毫不奇怪)
  • f應返回(不僅產率)
  • f應該使用接受來自sendsome_var = yield
  • a將收到價值返回f

這裏有一個f例如:

def f(): 
    while 1: 
     x = yield 
     if next is None: 
      return "something" 
     do_something_with_recieved_value(x) 

考慮發電機g

l = [] 
def g(): 
    while True: 
     a = yield from f() 
     l.append(a) 
  • 每當f返回,返回值被放入l
  • 每個值發送到g via send將被轉發到f

注意:您需要能夠send它的東西之前,開始你的發電機。

o = g() 
next(o) # Ensure the accumulator is ready to accept values 

我沒有測試過任何東西,不要猶豫,如果有什麼不清楚的評論。

2

這裏是

def f(): 
    for i in range(2): 
     yield i 
    return 3 

def g(): 
    a = yield from f() 
    print('a = {}'.format(a)) 

for item in g(): 
    print(item) 

# output: 
# 0 
# 1 
# a = 3 

a被分配值的函數f()return一個非常簡單的例子(yield from只能在函數內部中使用)。生成器g會生成所有中間結果。

  • f必須是發生器(東西yield s)。
  • a將被簡單地分成f()的返回值