2017-08-12 59 views
0

下面是混淆了我(下文解釋)的部分代碼:爲什麼這個Python代碼返回一個生成器對象?

class Node: 
    def __init__(self, start, end): 
     self.start = start 
     self.end = end 

intervals = [Node(1, 2), Node(3, 4), Node(5, 6)] 

starts = sorted(i.start for i in intervals) 
ends = sorted(i.end for i in intervals) 

爲什麼(i.start for i in intervals)回報發電機對象,爲什麼去掉括號像這樣i.start for i in intervals返回無效語法錯誤?

+1

你的問題是什麼? '(i.start for i in intervals)'是[gen-exp的語法](https://www.python.org/dev/peps/pep-0289/),因此它返回一個生成器和'i。我以間隔開始「不是有效的語法。 –

+0

在你的代碼中,什麼是生成器? 'starts'或'ends'的值?或者'(i.start我間隔)'? – Quelklef

回答

2

(x for x in y)是創建Python生成器的簡寫方法。 如果你想通過列表進行迭代,使用

for x in y: 
    # do stuff 

括號讓Python的解析表達式作爲一個令牌,這讓它知道你要創建一個發電機。如果沒有括號,Python最初會看到i.start,所以它期待一個表達式。 for關鍵字雖然自開始一個新的語句,但拋出它。當解釋器讀取它時,括號將它們組合成一個標記,因此Python能夠將其識別爲生成器語法。

+3

'sorted()'返回一個列表本身。 –

+0

你說得對,因爲某種原因,我正在考慮'顛倒過來'。 – ChristianFigueroa

相關問題