列表()构造函数与列表?
list() constructor with list?
我是 Python 的新手,我不明白这段代码中 list()
函数的用途:
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
方法 words()
已经从字符串中返回标记化单词的列表,我看不出它和
有什么区别
documents = [(movie_reviews.words(fileid), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
三种可能:
这是一个错误,不需要调用 list()
。
接口只保证方法return是Iterable
类型,可以是以下任意一种:list、set、iterator、generator等。具体movie_reviews.words()
今天可能 return 一个列表,但在未来的版本中可能会改变,或者在其他 类 具有相似界面(child/parent/or 只是相似的界面)。
是否是这种情况,应该在文档中明确说明,或者可以从继承层次结构中闪现出来。
该方法执行某种记忆,同时保留 returned 列表的副本。一个好的做法是在方法中复制缓存列表,但也许他们 returned 了一个共享列表对象。
如果方法 return 是对共享列表对象的引用,那么最好调用 list()
,以创建新的列表对象。如果没有复制操作,一方对 list
的任何更改(在方法内部与通过 documents
变量相比)都会混淆另一方。如果您通过 documents
变量更改列表,则使用相同的 fileid
调用 movie_reviews.words(fileid)
可能 return 错误的值。
总的来说,虽然这是糟糕的设计,但在实际代码中会发生这种情况。我曾经不得不在实时代码中调试这样的问题。通常在memoization的情况下,return不可变的类型如元组,而不是列表,这样既保证速度又保证安全。
我是 Python 的新手,我不明白这段代码中 list()
函数的用途:
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
方法 words()
已经从字符串中返回标记化单词的列表,我看不出它和
documents = [(movie_reviews.words(fileid), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
三种可能:
这是一个错误,不需要调用
list()
。接口只保证方法return是
Iterable
类型,可以是以下任意一种:list、set、iterator、generator等。具体movie_reviews.words()
今天可能 return 一个列表,但在未来的版本中可能会改变,或者在其他 类 具有相似界面(child/parent/or 只是相似的界面)。是否是这种情况,应该在文档中明确说明,或者可以从继承层次结构中闪现出来。
该方法执行某种记忆,同时保留 returned 列表的副本。一个好的做法是在方法中复制缓存列表,但也许他们 returned 了一个共享列表对象。
如果方法 return 是对共享列表对象的引用,那么最好调用
list()
,以创建新的列表对象。如果没有复制操作,一方对list
的任何更改(在方法内部与通过documents
变量相比)都会混淆另一方。如果您通过documents
变量更改列表,则使用相同的fileid
调用movie_reviews.words(fileid)
可能 return 错误的值。总的来说,虽然这是糟糕的设计,但在实际代码中会发生这种情况。我曾经不得不在实时代码中调试这样的问题。通常在memoization的情况下,return不可变的类型如元组,而不是列表,这样既保证速度又保证安全。