为什么输出不打印列表?

时间:2017-05-04 16:40:50

标签: python python-3.x nltk

我在Python中使用nltk库;我的背景是Java。我不明白我写的代码的控制台输出。尽管我将初始化变量tokens作为列表,但为什么Python会返回一个奇怪的形式。

from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
import nltk
def tokenize_sentence(sentence):
    tokens=[]
    tokens = word_tokenize(sentence)

    tokens = (word for word in tokens if word not in \
              set(stopwords.words('english')))
    return tokens;

a="John is an actor."
print(tokenize_sentence(a))

输出:

<generator object tokenize_sentence.<locals>.<genexpr> at 0x10dc5b1a8>

我将此输出看作类似于Java在尝试打印未定义toString()方法的对象时所做的操作。

1 个答案:

答案 0 :(得分:6)

初始分配不是类型声明。 Python自由变量没有具有类型声明。例如,你被允许写

x = 7
x = []
x = "Hello"

...并查看 x 更改每种作业的类型。

在这种情况下,您有三个独立的令牌分配。每个都以相同的方式工作:

  1. 评估右侧的表达。
  2. 使左侧的变量引用该值。
  3. 忽略变量的先前值。当您构建一个内联生成器 - 您的(逐字逐句......)表达式 - 并将其分配给令牌时,您将之前的值发送到该位桶(即垃圾收集)。当您打印生成器时,不是迭代其功能,而是获得对象的Python表示。

    正如 Jim Fasarakis Hilliard 已经提到的,如果你想要一个列表,那么使用列表理解语法:括号,而不是括号。另外,您是否打算使用令牌的先前值进行任何处理?目前,我认为这些任务没有任何持久影响。