[Python-Dev] Re: Alternative Implementation
forPEP292:SimpleString Substitutions
Barry Warsaw
barry at python.org
Fri Sep 10 20:38:14 CEST 2004
On Fri, 2004-09-10 at 01:50, Raymond Hettinger wrote:
> [Barry]
> > And to make effbot and Raymond happy, it won't auto-promote to unicode
> > if everything's an 8bit string.
>
> Glad to see that my happiness now ranks as a development objective ;-)
Well, if I want to get other work done... :)
> > There will be updated unit tests, and I will update the documentation
> > and the PEP as appropriate -- if we've reached agreement on it.
>
> +1
> Beautiful job.
Cool!
> The arguments against such reporting are:
> * Raymond is smoking crack. End users will never make this mistake.
> * The docs say python identifiers only. You blew it. Tough. Not a
> bug.
> * For someone who understands exactly what they are doing, perhaps $ma
> is the intended placeholder -- why force them to uses braces:
> ${ma}ñana.
It also makes it more difficult to document. IOW, right now the PEP and
the documentation say that the first non-identifier character terminates
the placeholder. How would you word the rules with your change?
> In addition to the above usability issue, there is one other nit. The
> new invocation syntax offers us the opportunity for to also accept
> keyword arguments as mapping alternatives:
>
> def substitute(self, mapping=None, **kwds):
> if mapping is None:
> mapping == kwds
> . . .
>
> When applicable, this makes for beautiful, readable calls:
>
> t.substitute(who="Barry", what="mailmeister", when=now())
>
> This would be a simple and nice enchancement to Barry's excellent
> implementation. I recommend that keyword arguments be adopted.
My only problem with that is the interference that the 'mapping'
argument presents. IOW, kwds can't contain 'mapping'. We could solve
that in a couple of ways:
1. ignore the problem and tell people not to do that
2. change 'mapping' to something less likely to collide, such as
'_mapping' or '__mapping__', and then see #1.
3. get rid of the mapping altogether and only have kwds. This would
change the non-keyword invocation from
mytemplate.substitute(mymapping)
to
mytemplate.substitute(**mymapping)
A bit uglier and harder to document.
Note that there's also a potential collision on 'self'.
-Barry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 307 bytes
Desc: This is a digitally signed message part
Url : http://mail.python.org/pipermail/python-dev/attachments/20040910/20fd8f3e/attachment.pgp
More information about the Python-Dev
mailing list