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?
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