Chris Angelico <ros...@gmail.com>: > On Mon, Mar 16, 2015 at 6:12 PM, Marko Rauhamaa <ma...@pacujo.net> wrote: >> >> I was actually referring to the offered API. It still seems to me like >> all iterators could offer close(), send() and throw(). Why? To make all >> iterators drop-in replacements of each other. > > [...] > > That just adds unnecessary overhead to every iterator.
Trivial implementations are a normal way to satisfy an API. That's why /dev/null implements a close() method, for example. > Also, what happens when you throw something into iter([1,2,3]) ? Or > send it a value? What happens? I would expect iter([1, 2, 3]) to behave highly analogously to (x for x in [1, 2, 3]). ===begin /tmp/test.py=================================================== #!/usr/bin/env python3 def main(): it = (x for x in [1, 2, 3]) print(next(it)) while True: try: print(it.send("hello")) except StopIteration: break if __name__ == "__main__": main() ===end /tmp/test.py===================================================== ======================================================================== $ python3 /tmp/test.py 1 2 3 ======================================================================== but: ===begin /tmp/test.py=================================================== #!/usr/bin/env python3 def main(): it = iter([1, 2, 3]) print(next(it)) while True: try: print(it.send("hello")) except StopIteration: break if __name__ == "__main__": main() ===end /tmp/test.py===================================================== ======================================================================== $ python3 /tmp/test.py 1 Traceback (most recent call last): File "/tmp/test.py", line 13, in <module> main() File "/tmp/test.py", line 8, in main print(it.send("hello")) AttributeError: 'list_iterator' object has no attribute 'send' ======================================================================== Marko -- https://mail.python.org/mailman/listinfo/python-list