我遇到了Python问题。 我试图了解哪些是存储在我发现的生成器的对象中的信息。 我对Python一无所知,但我必须了解这段代码是如何工作的,以便将其转换为Java。 代码如下:
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和splits方法是如何工作的(函数Pw(w)只是从矩阵中得到一个值),我仍然试图理解“候选”对象在“段”方法中是如何的建造及其包含的内容。 以及“max()”函数如何分析此对象。
我希望有人可以帮助我,因为我在这里找不到任何可行的解决方案来打印这个对象。 非常感谢大家。 莫罗。
答案 0 :(得分:0)
生成器是非常简单的抽象。它看起来像一次性使用自定义迭代器。
gen = (f(x) for x in data)
表示gen是迭代器,每个下一个值等于f(x),其中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)