python - string.format(...,**locals()) 的缩写形式

标签 python string lambda scope string-formatting

我通常使用以下模式(如 this question 中所述):

a=1
s= "{a}".format(**locals())

我认为这是编写易于阅读的代码的好方法。

有时“链接”字符串格式很有用,以便“模块化”复杂字符串的创建:

a="1"
b="2"
c="{a}+{b}".format(**locals())
d="{c} is a sum".format(**locals())
#d=="1+2 is a sum"

很快,代码就被 X.format(**locals()) 缠住了。 为了解决这个问题,我尝试创建一个 lambda:

f= lambda x: x.format(**locals())
a="1"
b="2"
c= f("{a}+{b}")
d= f("{c} is a sum")

但这会抛出一个 KeyError,因为 locals() 是 lambda 的局部变量。

我还尝试只在最后一个字符串上应用格式:

a="1"
b="2"
c="{a}+{b}"
d="{c} is a sum".format(**locals())
#d=="{a}+{b} is a sum"

但这行不通,因为 python 只格式化一次。 现在,我可以编写一个重复格式化的函数,直到无事可做:

def my_format( string, vars ):
    f= string.format(**vars)
    return f if f==string else my_format(f, vars)

但我想知道:是否有更好的方法来做到这一点?

最佳答案

f = lambda x, l=locals(): x.format(**l) 似乎有效...

如果您想要一个包罗万象的版本(并且可能慢很多):

fg = lambda x, l=locals(), g=globals(): x.format(**dict(g.items() + l.items()))

将在局部变量或全局变量中查找符号。

关于python - string.format(...,**locals()) 的缩写形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19549980/

相关文章:

python - 如何在python中删除字符串中任意位置的字母?

linq - 使用变量构建 Linq 表达式

.net - 将 Linq/Lambda 表达式转换为匿名方法

python - 为什么PyGame动画闪烁

Python 与 Jython - MuleSoft

python - 如何合并 `pandas` 中的部分多索引

java - 根据 String.valueOf(Object obj) 的值创建一个新 Shape

string - Lua SQL 转义字符串(尝试) '"附近未完成的字符串}'

Java Lambda 流列表<用户> 到映射<角色,列表<用户>>

python - 根据条件替换所有列中的所有值