5

这是来自 Wes Mckinney 的 Python for Data Analysis 第 204 页

genre_iter = (set(x.split('|')) for x in movies.genres)
genres = sorted(set.union(*genre_iter))

%paste在 IPython 中使用该方法时,此代码可以完美运行。该代码在 Python shell 中运行时也能完美运行。但是,当我直接在 IPython 中键入第二行时,没有%paste方法

genres = sorted(set.union(*genre_iter))

我收到以下错误

TypeError: descriptor 'union' of 'set' object needs an argument

这似乎是一个错误,除非我仍然不知道 IPython 的某个功能。

4

1 回答 1

13

你已经用尽了发电机。在再次使用之前重新定义它:

genre_iter = (set(x.split('|')) for x in movies.genres)
genres = sorted(set.union(*genre_iter))

在 python 中,一旦你循环了一个迭代器的所有元素,你就不能再循环这个迭代器(它现在是空的)。

因为genre_iter迭代器是空的,你没有传递任何参数,set.union()因此它抱怨:

>>> set.union()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor 'union' of 'set' object needs an argument

明确地说:您没有在 ipython 中找到错误。您可以在常规 python 提示符中重现相同的问题。

于 2013-02-06T02:08:55.293 回答