[Python-3000] PEP 3124 - more commentary

Phillip J. Eby pje at telecommunity.com
Tue May 15 02:35:42 CEST 2007

At 05:17 PM 5/14/2007 -0700, Guido van Rossum wrote:
>Other use cases that come to mind are e.g. APIs that you can pass
>either a Point object or two (or three!) floats. This is not a natural
>use case for argument default values, and it's not always convenient
>to require the user to pass a tuple of floats (perhaps the
>three-floats API already existed and its signature cannot be changed
>for compatibility reasons). Or think of a networking function that
>takes either a "host:port" string or a host and port pair; thinking of
>this as having a default port is also slightly awkward, as you don't
>know what to do when passed a "host:port" string and a port.

How do people handle these in Python now?  ISTM that idiomatic Python 
for these cases would either use tuples, or else different method names.

Or is the intention here to make it easier for people porting code 
over from Java and C++?

Anyway, as I said, I think it's *possible* to do this.  It just 
strikes me as more complex than existing ways of handling it in Python.

More importantly, it seems to go against the grain of at least my 
mental concept of Python call signatures, in which arguments are 
inherently *named* (and can be passed using explicit names), with 
only rare exceptions like range().  In contrast, the languages that 
have this sort of positional thing only allow arguments to be 
specified by position, IIRC.  That's what makes me uncomfortable with it.

That having been said, if you want it, there's probably a way to make 
it work.  I just think we should try to preserve the "nameness" of 
arguments in the process -- and consider whether the use cases you've 
listed here actually improve the code clarity any.

More information about the Python-3000 mailing list