[Python-Dev] Replacement for print in Python 3.0

Nick Coghlan ncoghlan at gmail.com
Sat Sep 3 16:50:35 CEST 2005

Paolino wrote:
> Nick Coghlan wrote:
>> If an iterator wants to behave like that, the iterator should define 
>> the appropriate __str__ method. Otherwise, just break it up into 
>> multiple lines:
>>    write(1, 2, [3,4])
>>    write(*(c for c in 'abc'))
> This cannot accept keyword args(I wonder if this is a bug), which makes 
> it a non compatible solution with the rest of yours.

Actually, it's an ordering quirk in the parser - the extended call syntax 
stuff has to come last in the function call, which means we need to put the 
keyword arguments at the front:

Py> writeln(sep=', ', *(x*x for x in range(10)))
0, 1, 4, 9, 16, 25, 36, 49, 64, 81

I personally believe keyword arguments should be allowed between *args and 
**kwds at the call site, and keyword-only arguments after * in the function 
definition, but the current behaviour has never bothered me enough for me to 
look into what would be required to change it.


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia

More information about the Python-Dev mailing list