str.format utility function

Hi list, I'm sorry if this has been discussed before, but I did not find any references. I've been playing abit with the new str.format function. I really like the syntax and simplicity. However, when simply printing named variables in locals() or a class, I quite common use-case, I find it a bit too complicated with the **: "Local variable var1 is %(var1)s" % locals() vs "Local variable var1 is {var1}".format(**locals()) and "Instance variable var2 is %(var2)s" % self.__dict__ vs "Instance variable var2 is {var2}" % **self.__dict__ Therefore I have made myself a utility funcion: def easyformat(s, data): try: return s.format(**data) except TypeError: return s.format(**data.__dict__) so that I can do the following: "Local variable var1 is {var1}".format(**locals()) and "Instance variable var2 is %(var2)s" % self Should a function similar to this (maybe with a better name) be included included in some standard library? -Dag _________________________________________________________________ Få mer ut av Windows Live™ med Internet Explorer® 8. http://microsoft.no/ie

fwiw: 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. On Fri, May 8, 2009 at 6:05 PM, Dag Moxnes <dagmoxnes@hotmail.com> wrote:
Hi list,
I'm sorry if this has been discussed before, but I did not find any references. I've been playing abit with the new str.format function. I really like the syntax and simplicity.
However, when simply printing named variables in locals() or a class, I quite common use-case, I find it a bit too complicated with the **:
"Local variable var1 is %(var1)s" % locals()
vs
"Local variable var1 is {var1}".format(**locals())
and
"Instance variable var2 is %(var2)s" % self.__dict__
vs
"Instance variable var2 is {var2}" % **self.__dict__
Therefore I have made myself a utility funcion:
def easyformat(s, data): try: return s.format(**data) except TypeError: return s.format(**data.__dict__)
so that I can do the following:
"Local variable var1 is {var1}".format(**locals())
and
"Instance variable var2 is %(var2)s" % self
Should a function similar to this (maybe with a better name) be included included in some standard library?
-Dag
________________________________ En om gangen eller alle på én gang? Få oppdateringer fra vennene dine på ett sted. _______________________________________________ Python-ideas mailing list Python-ideas@python.org http://mail.python.org/mailman/listinfo/python-ideas
-- Gerald Britton

Dag Moxnes wrote:
Hi list,
I'm sorry if this has been discussed before, but I did not find any references. I've been playing abit with the new str.format function. I really like the syntax and simplicity.
However, when simply printing named variables in locals() or a class, I quite common use-case, I find it a bit too complicated with the **:
"Local variable var1 is %(var1)s" % locals()
vs
"Local variable var1 is {var1}".format(**locals())
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
participants (3)
-
Dag Moxnes
-
Gerald Britton
-
Terry Reedy