Tim Hochberg wrote: > Ian Bicking wrote: >> Alex Martelli wrote: >>> As for the % operator, I never liked it -- either a builtin >>> function, or even better a method of string objects, is going to be >>> much more readable (and my preference would be to have it take >>> optional positional arguments, corresponding to {1}, {2}, etc, and >>> optional named arguments, corresponding to {name} &c). >> >> >> >> Note that if it takes keyword arguments, but doesn't take a single >> dictionary-like object (like % and string.Template.substitute do), >> then you lose any ability to use clever or interesting dictionary-like >> objects for substitution. >> > > Why doesn't the ** take care of this? To take your example, why doesn't > this work? > > string.Template(pattern).substitute(**EscapingWrapper(**EvalingWrapper(**locals())) > > > > Is it that you feel that adding ** is too much of a syntactic burden, or > am I just missing something?
func(**kw) actually passes a dictionary to func. EvalingWrapper isn't a dictionary, it's just an object with a __getitem__. ** can't be changed in this way, either -- it really has to enumerate all the keys in the thing passed to it, and there's no way to enumerate all the keys in a wrapper like EvalingWrapper. Any string substitution only needs __getitem__, so these constraints when calling a function with ** do not apply to the actual string substition. -- Ian Bicking / [EMAIL PROTECTED] / http://blog.ianbicking.org _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com