Alternative iterator syntax
Marcin 'Qrczak' Kowalczyk
qrczak at knm.org.pl
Wed Feb 21 16:46:33 EST 2001
More information about the Python-list mailing list
Wed Feb 21 16:46:33 EST 2001
- Previous message (by thread): Alternative iterator syntax
- Next message (by thread): Alternative iterator syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Wed, 21 Feb 2001 03:32:03 -0800 (PST), Huaiyu Zhu <hzhu at users.sourceforge.net> pisze: > Following suggestion by Jeff Petkau <jpet at eskimo.com>, > (http://mail.python.org/pipermail/python-list/2001-February/029944.html), > here is a different proposal for iterators. I dislike it for the following reasons: * It requires "magic attributes", i.e. implementing __getattr__ in each user class that wants to be a sequence with the same interface as list. Python already has a way used for things like obtaining iterators: method calls. Use that. Using d.keys to mean a flavor of d.keys() is weird. * It is too complex. There are many special methods, and syntactic sugar like for loops expands to one of many forms depending on what operations are provided. Python succeeded being quite simple. Please don't ruin that. * The __arity__ thing does not fit dynamically typed Python at all. When you want some static typing, go for a more general type system (which would be optional in the context of Python) instead of adding a kludge like this. What do I propose instead? Choose one: 1. Design a simple iterator protocol and add methods like xitems(), xkeys() and xvalues() which produce such iterators. I mean simple protocol, used only for 'for' loops! A single method for __next__ suffices (it can be __call__). 2. Design a lazy list framework. Let items(), keys(), values(), range(), readlines() etc. return lazy lists. Laziness is not as easy in imperative languages as in functional ones. The framework should take care to keep the current behavior of k = d.keys() d[spam] = eggs use(k) It can be done by putting weak references (avoiding reference loops) to iterators obtained from a mutable object inside the object, to notify iterators when the object is about to mutate, so they suck all elements immediately before the mutation. Perhaps design a more general mutability notification framework before that. -- __("< Marcin Kowalczyk * qrczak at knm.org.pl http://qrczak.ids.net.pl/ \__/ ^^ SYGNATURA ZASTĘPCZA QRCZAK
- Previous message (by thread): Alternative iterator syntax
- Next message (by thread): Alternative iterator syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list