A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2003-November/040171.html below:

[Python-Dev] question about PEP 323 (copyable iterators)

[Python-Dev] question about PEP 323 (copyable iterators)Andrew Koenig ark at acm.org
Tue Nov 11 10:48:15 EST 2003
Early in PEP 323, there is a claim that an iterator is considered copyable
if it has a __copy__ method.  The following example in the PEP illustrates
that claim:

        def tee(it):
            it = iter(it)
            try: copier = it.__copy__
            except AttributeError:
                # non-copyable iterator, do all the needed hard work
                # [snipped!]
            else:
                return it, copier()

Later in the PEP, there is an example that suggests that an iterator should
be considered copyable only if its __copy__ method can be called:

        class enumerate(object):

            def __init__(self, it):
                self.it = iter(it)
                self.i = -1

		# next and __iter__ methods snipped from the original

            def __copy__(self):
                result = self.__class__.new()
                result.it = self.it.__copy__()
                result.i = self.i
                return result

Here, class enumerate always has a __copy__ method, even if the iterator
that is being enumerated doesn't.  In other words, if you use class
enumerate on an iterator that isn't copyable, you get an iterator with a
__copy__ method that isn't copyable.

Is that behavior really right?  I would think that you would have to do
something like this:

        class enumerate(object):

            def __init__(self, it):
                self.it = iter(it)
                self.i = -1
		    try it.__copy__
		    except AttributeError: pass
		    else: self.__copy__ = self.conditional_copy

            def conditional_copy(self):
                result = self.__class__.new()
                result.it = self.it.__copy__()
                result.i = self.i
                return result

Am I missing something?


More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4