python set union_python – set.union()抱怨它在传入生成器时没有参数

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

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

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

在IPython中使用%paste方法时,此代码非常有效.在Python shell中运行时,代码也可以正常运行.但是,当我直接在IPython中键入第二行时,没有%paste方法

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

我收到以下错误

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

这似乎是一个bug,除非有一个我仍然没有意识到的IPython功能.

解决方法:

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

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 "", line 1, in

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

只是为了明确:你没有在ipython中找到错误.您可以在常规python提示中重现相同的问题.

标签:python,ipython,generator

来源: https://codeday.me/bug/20190725/1535724.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值