After posting a patch to implement this some good discussion followed
see: http://bugs.python.org/issue2610
It was suggested that a broader discussion might be in order around
the issue of iterators and how they are displayed in the command line
interpreter.
Several new iterators have appeared in Python 3.0 that makes the
language less transparent to beginning programmers. The examples that
immediately come to mind are shown below, and I would guess there are
others I haven't run across yet.
>>> range(10)
range(0, 10)
>>> myd = {chr(i):i for i in range(32,42)}
>>> myd.keys()
<dict_keys object at 0xf31f0>
>>> myd.values()
<dict_values object at 0xf3220>
>>> myd.items()
<dict_items object at 0xf31f0>
Although none of the above are a problem for intermediate or advanced
programmers I would like to find a way so that beginning students
would automatically get a more helpful representation when they
evaluate expressions in the interpreter.
My solution of implementing the __str__ method for range is one
solution, and that could also be done for the dict_xxx objects as
well. Other solutions that were suggested were to include some kind
of a module that overrides sys.displayhook or to simply make the
command line interpreter more intelligence. For example it already
handles a return value of None in a special way, maybe it should do
something for these iterators as well.
Any other comments or ideas?
Thanks,
Brad
On Apr 7, 2008, at 6:24 PM, Guido van Rossum wrote:
I'd object to it returning something that resembles a list too
closely, but I could live with str(range(3)) return <0, 1, 2>. We
should probably have a cutoff so that if there are more than 6 values
it'll show the first 3 values, then dots, then the last 2 values. (The
cutoff would be computed so that '...' always represents at least 2
values.
On Mon, Apr 7, 2008 at 4:14 PM, Brad Miller <[EMAIL PROTECTED]>
wrote:
Hi,
I use Python in my CS1 and CS2 curriculum and I have a question.
As I've been using the Python 3.0 alphas one of the things that I am
bothered by is that I cannot see the sequence produced by range
without introducing students to the list() function.
I typically introduce range on day 1 of class and show students what
it produces without making a big deal out of the fact that it creates
a list. They all accept this and things work out nicely when I
introduce lists for real in a week or two.
My question is why couldn't the __str__ method for the range object
be
more friendly and show a representation of the sequence? I
understand
why __repr__ should return range(0,10) for an object created using
range(10) but couldn't print(range(10)) produce [0, 1, 2, ... 9]
The ... could even be used if the sequence were excessively wrong.
If this is acceptable, I would be happy to accept the challenge of
providing a patch.
Thanks,
Brad
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/guido%40python.org
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com