在tuple
“功能”(这真是一个类型,但是这意味着你可以把它像一个函数)将采取任何迭代,包括一个迭代器,作为其参数。因此,如果要将对象转换为元组,只需确保它是可迭代的即可。这意味着实现一种__iter__
方法,该方法应该是一个生成器函数(一个函数体包含一个或多个yield
表达式)。例如
>>> class SquaresTo:
... def __init__(self, n):
... self.n = n
... def __iter__(self):
... for i in range(self.n):
... yield i * i
...
>>> s = SquaresTo(5)
>>> tuple(s)
(0, 1, 4, 9, 16)
>>> list(s)
[0, 1, 4, 9, 16]
>>> sum(s)
30