Python:使用变量名占位符格式化字符串

Python:使用变量名占位符格式化字符串,python,string-formatting,iterable-unpacking,Python,String Formatting,Iterable Unpacking,考虑以下字符串生成语句: s="svn cp %s/%s/ %s/%s/" % (root_dir, trunk, root_dir, tag) 使用四个%s可能会令人困惑,因此我更喜欢使用变量名: s="svn cp {root_dir}/{trunk}/ {root_dir}/{tag}/".format(**SOME_DICTIONARY) 当root\u dir,tag和trunk在类的范围内定义时,使用self.\uu dict\uu可以很好地工作: s="svn cp {root

考虑以下字符串生成语句:

s="svn cp %s/%s/ %s/%s/" % (root_dir, trunk, root_dir, tag)
使用四个
%s
可能会令人困惑,因此我更喜欢使用变量名:

s="svn cp {root_dir}/{trunk}/ {root_dir}/{tag}/".format(**SOME_DICTIONARY)
root\u dir
tag
trunk
在类的范围内定义时,使用
self.\uu dict\uu
可以很好地工作:

s="svn cp {root_dir}/{trunk}/ {root_dir}/{tag}/".format(**self.__dict__)
但是当变量是局部变量时,它们不会在字典中定义,因此我使用字符串连接:

s="svn cp "+root_dir+"/"+trunk+"/ "+root_dir+"/"+tag+"/"
我发现这个方法非常混乱,但我不知道如何使用内联局部变量构造字符串

当变量是本地变量时,如何使用变量名构造字符串?

更新:使用该函数完成了更新

请注意,允许混合使用局部变量和对象变量!e、 g

s="svn cp {self.root_dir}/{trunk}/ {self.root_dir}/{tag}/".format(**locals())
你可以使用这个函数

编辑:

由于python 3.6,您可以使用:


您是否尝试过
s=“svn cp{root\u dir}/{trunk}/{root\u dir}/{tag}/”.format(**locals())

不那么神秘,速度更快

“我的名字是{{{{{{name}”。格式化地图(locals())
(地图)

与str.format(**映射)类似,只是映射直接使用,而不是复制到dict


谢谢,完全忘记了
locals()
。请注意,{a}.format(**locals())、{a}.format(a=a)和{0}.format(a)的计时分别为450纳秒、410纳秒和215纳秒。(好的,是ns…)注意字符串插值(非常棒,适用于绝大多数用例)将立即格式化;在某些情况下(如模板字符串参数),您可能希望稍后在初始字符串分配之后调用
format
方法
s="svn cp {root_dir}/{trunk}/{root_dir}/{tag}/".format(**locals())
s = f"svn cp {root_dir}/{trunk}/{root_dir}/{tag}/"