2013-05-16 135 views
0

我有一個Python的問題。 我想了解哪些是存儲在我發現是一個生成器的對象中的信息。 我對Python一無所知,但我必須瞭解這段代碼如何工作才能將其轉換爲Java。 代碼如下:python嵌套生成器對象內容

def segment(text): 
    "Return a list of words that is the best segmentation of text." 
    if not text: return [] 
    candidates = ([first]+segment(rem) for first,rem in splits(text)) 
    return max(candidates, key=Pwords) 

def splits(text, L=20): 
    "Return a list of all possible (first, rem) pairs, len(first)<=L." 
    pairs = [(text[:i+1], text[i+1:]) for i in range(min(len(text), L))] 
    return pairs 

def Pwords(words): 
    "The Naive Bayes probability of a sequence of words." 
    productw = 1 
    for w in words: 
     productw = productw * Pw(w) 
    return productw 

,而我的理解是怎麼方法Pwords並分割工作(功能Pw的(W)只要從一個矩陣的值),我還是想知道,如何「候選人「對象,在」細分「方法中構建幷包含它。 以及「max()」函數如何分析此對象。

我希望有人能幫助我,因爲我沒有找到任何可行的解決方案來打印此對象。 非常感謝大家。 毛羅。

+0

可能重複替換嵌套發電機[在Python瞭解發電機?(http://stackoverflow.com/questions/1756096/understanding-generators -in-python)相關問題:[Python yield關鍵字解釋](http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained) – Bakuriu

回答

0

生成器是非常簡單的抽象。它看起來像一次性自定義迭代器。

gen = (f(x) for x in data) 

意味着根是迭代器,其中每個下一個值等於其中x爲相應的數據

的值f(x)的

嵌套發生器類似於列表理解與小的差異:

  • 它是一次性使用
  • 它不會創建整個序列
  • 代碼只在迭代過程中運行

更容易調試你可以嘗試用列表理解的

def segment(text): 
    "Return a list of words that is the best segmentation of text." 
    if not text: return [] 
    candidates = [[first]+segment(rem) for first,rem in splits(text)] 
    return max(candidates, key=Pwords) 
+0

非常感謝! 我改變了代碼,我開始瞭解這個列表是如何構建的......;) – Mauro