0

我对 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) 只是从矩阵中获取一个值),但我仍然试图了解“segment”方法中的“candidates”对象是如何构建的以及什么它包含。以及“max()”函数如何分析这个对象。

我希望有人可以帮助我,因为我在这里没有找到任何可行的解决方案来打印这个对象。非常感谢大家。毛罗。

4

1 回答 1

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)
于 2013-05-16T11:03:40.113 回答