如何以__len__(...)
喜欢的方式将len(...)
添加到现有对象?
用例是记住生成器的第一次迭代后的长度,这种方式不需要在迭代的站点之间编写/更改代码。
这是我到目前为止所拥有的:
def generator2iterator(generator):
class Iterator(object):
def __iter__(self):
i = 0
for e in generator():
i += 1
yield e
#self.__len__ = types.MethodType(lambda self: i, self)
self.__len__ = (lambda self: i).__get__(self)
return Iterator()
def test_generator():
yield 3
iterator = generator2iterator(test_generator)
print(list(iterator))
# [3]
print(iterator.__len__())
# 1
print(len(iterator))
# TypeError: object of type 'Foo' has no len()
答案 0 :(得分:0)
定义一个保存长度的属性,并返回select * , ABS(P_PRICE - avg(P_PRICE)) as Difference from product;
的长度。
__len__