为什么输出不打印列表?

AV9*_*V94 0 python nltk python-3.x

我在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))
Run Code Online (Sandbox Code Playgroud)

输出:

<generator object tokenize_sentence.<locals>.<genexpr> at 0x10dc5b1a8>
Run Code Online (Sandbox Code Playgroud)

我看到这个输出类似于Java当我尝试打印未定义toString()方法的对象时所做的事情.

Pru*_*une 6

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

x = 7
x = []
x = "Hello"
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 评估右侧的表达式.
  2. 使左侧的变量引用该值.

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

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