gon*_*opp 8 python string lambda scope string-formatting
我通常使用以下模式(如本问题中所述):
a=1
s= "{a}".format(**locals())
Run Code Online (Sandbox Code Playgroud)
我认为这是编写易读代码的好方法.
有时,"链接"字符串格式是有用的,以便"模块化"复杂字符串的创建:
a="1"
b="2"
c="{a}+{b}".format(**locals())
d="{c} is a sum".format(**locals())
#d=="1+2 is a sum"
Run Code Online (Sandbox Code Playgroud)
很快,代码就被纠缠不清了X.format(**locals()).为了解决这个问题,我尝试创建一个lambda:
f= lambda x: x.format(**locals())
a="1"
b="2"
c= f("{a}+{b}")
d= f("{c} is a sum")
Run Code Online (Sandbox Code Playgroud)
但这引发了一个KeyError,因为locals()是lambda的本地人.
我还尝试仅在最后一个字符串上应用格式:
a="1"
b="2"
c="{a}+{b}"
d="{c} is a sum".format(**locals())
#d=="{a}+{b} is a sum"
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为python只格式化一次.现在,我可以编写一个重复格式化的函数,直到没有其他事情要做:
def my_format( string, vars ):
f= string.format(**vars)
return f if f==string else my_format(f, vars)
Run Code Online (Sandbox Code Playgroud)
但我想知道:有更好的方法吗?
f = lambda x, l=locals(): x.format(**l)似乎有效...
如果您想要一个更全面的版本(并且可能要慢得多):
fg = lambda x, l=locals(), g=globals(): x.format(**dict(g.items() + l.items()))
Run Code Online (Sandbox Code Playgroud)
将在局部变量或全局变量中找到符号。
| 归档时间: |
|
| 查看次数: |
3377 次 |
| 最近记录: |