gpt4 book ai didi

python - 无法遍历 Python 中的列表类

转载 作者:太空狗 更新时间:2023-10-29 22:04:30 25 4
gpt4 key购买 nike

我正在尝试使用 pyplurk 为 Plurk 编写一个简单的 GUI 前端。

我已成功创建 API 连接、登录、检索和显示好友列表。现在我正在尝试检索并显示 Plurks 列表。

pyplurk 提​​供了一个GetNewPlurks 函数如下:

  def GetNewPlurks(self, since):
'''Get new plurks since the specified time.
Args:
since: [datetime.datetime] the timestamp criterion.
Returns:
A PlurkPostList object or None.
'''
offset = jsonizer.conv_datetime(since)
status_code, result = self._CallAPI('/Polling/getPlurks', offset=offset)
return None if status_code != 200 else \
PlurkPostList(result['plurks'], result['plurk_users'].values())

如您所见,这将返回一个 PlurkPostList,其定义如下:

class PlurkPostList:
'''A list of plurks and the set of users that posted them.'''
def __init__(self, plurk_json_list, user_json_list=[]):
self._plurks = [PlurkPost(p) for p in plurk_json_list]
self._users = [PlurkUser(u) for u in user_json_list]
def __iter__(self):
return self._plurks
def GetUsers(self):
return self._users
def __eq__(self, other):
if other.__class__ != PlurkPostList: return False
if self._plurks != other._plurks: return False
if self._users != other._users: return False
return True

现在我希望能够做这样的事情:

api = plurk_api_urllib2.PlurkAPI(open('api.key').read().strip(), debug_level=1)
plurkproxy = PlurkProxy(api, json.loads)
user = plurkproxy.Login('my_user', 'my_pass')
ps = plurkproxy.GetNewPlurks(datetime.datetime(2009, 12, 12, 0, 0, 0))
print ps
for p in ps:
print str(p)

当我运行它时,我实际得到的是:

<plurk.PlurkPostList instance at 0x01E8D738>

从“print ps”,然后:

    for p in ps:
TypeError: __iter__ returned non-iterator of type 'list'

我不明白 - 列表肯定是可迭代的吧?我哪里出错了 - 如何访问 PlurkPostList 中的 Plurks?

最佳答案

当您定义自己的 __iter__ 方法时,您应该意识到 __iter__ 方法应该返回一个 iterator,而不是一个 iterable 。您正在返回一个列表,而不是列表的迭代器,因此它失败了。例如,您可以通过执行 return iter(self._plurks) 来修复它。

如果你想做一些更复杂的事情,比如在迭代时处理 self._plurks 中的每个项目,通常的技巧是让你的 __iter__ 方法成为一个生成器。这样,调用 __iter__ 的返回值就是生成器,它是一个迭代器:

def __iter__(self):
for item in self._plurks:
yield process(item)

关于python - 无法遍历 Python 中的列表类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2652761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com