[Python-3000] String formating operations in python 3k

Ian Bicking ianb at colorstudy.com
Thu Apr 6 03:20:01 CEST 2006


Greg Ewing wrote:
> Ian Bicking wrote:
> 
>> ** can't be changed in this way, either -- it really has to enumerate 
>> all the keys in the thing passed to it,
> 
> In Py3k this could perhaps be different in the case where
> you're calling a function defined like
> 
>   def f(*args, **kwds):
>     ...
> 
> In that case there are no named arguments to look up
> in the dict, so when it's called using
> 
>   f(**obj)
> 
> the obj could be passed straight through to the kwds
> argument.

I thought of that, but that seemed much too clever.  For instance, if 
you then change the signature to:

   f(a, **obj)

Then it doesn't work anymore, because you have to test if a keyword of 
'a' was passed in.  ** in the signature and ** in the call are really 
not very symmetric.

With current substitution this isn't that big a deal, because you have 
either positional *or* named markers (or for string.Template positional 
are not allowed), and if you see any named marker you assume you were 
passed a dictionary-like object.  Some of the proposals that mix {1} 
with {name} in the same substitution are harder.  Also, they have to 
look at the name of the marker and see if it is an integer, and thus a 
dictionary with a key like '1' cannot be used.

-- 
Ian Bicking  |  ianb at colorstudy.com  |  http://blog.ianbicking.org


More information about the Python-3000 mailing list