我在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()方法的对象时所做的操作。
答案 0 :(得分:6)
初始分配不是类型声明。 Python自由变量没有具有类型声明。例如,你被允许写
x = 7
x = []
x = "Hello"
...并查看 x 更改每种作业的类型。
在这种情况下,您有三个独立的令牌分配。每个都以相同的方式工作:
忽略变量的先前值。当您构建一个内联生成器 - 您的(逐字逐句......)表达式 - 并将其分配给令牌时,您将之前的值发送到该位桶(即垃圾收集)。当您打印生成器时,不是迭代其功能,而是获得对象的Python表示。
正如 Jim Fasarakis Hilliard 已经提到的,如果你想要一个列表,那么使用列表理解语法:括号,而不是括号。另外,您是否打算使用令牌的先前值进行任何处理?目前,我认为这些任务没有任何持久影响。