one = 'slower'
two = 'yours'
"my str is %(one)s than %(two)s" % locals()
is slower than:
"my str is %(one)s than %(two)s" % {"one":faster, "two":yours}
probably because of the overhead of the function call to locals().
Basically I find using locals() this way is just lazy programming,
since you hope your variables are in there somewhere. If someone
changes them later, your string expression may fail. I'd rather be
explicit about what I'm doing.
> _______________________________________________
> Python-ideas mailing list
> Python...@python.org
> http://mail.python.org/mailman/listinfo/python-ideas
>
>
--
Gerald Britton
_______________________________________________
Python-ideas mailing list
Python...@python.org
http://mail.python.org/mailman/listinfo/python-ideas
I see nothing compicated about **. In any case, it is a common idiom
that Python progrmmers should learn and hopefully become comfortable
with. I see nothing gained with
s.easyformat(s, locals()) # over
s.format(**locals)
except a few extra chars to type ;-).
If you were doing that often, you could write
def lform(s): # format caller locals
l = <locals of caller> # ask on Python list or check python recipies
return s.format(**l)
> "Instance variable var2 is %(var2)s" % self.__dict__
>
> vs
>
> "Instance variable var2 is {var2}" % **self.__dict__\
You meant,
"Instance variable var2 is {var2}".format(**self.__dict__)
Wrapping this seems like a possible method. For a constant format
applicable to all instances, override .__str__().
> def easyformat(s, data):
> try:
> return s.format(**data)
> except TypeError:
> return s.format(**data.__dict__)
> Should a function similar to this (maybe with a better name) be
> included in some standard library?
I think not.
Terry Jan Reedy