如何将变量替换为 Python 格式字符串
How to substitute variables into Python format string
我有一个像这样的 Python 字符串:
template = '{a} or {b} but not {c}; {d} and {e}, not {f}'
之后定义了变量a
、b
、c
、d
、e
、f
。它们未在 template
之前定义,因此我不能使用 f 字符串文字。我想将它们的值代入 template
.
这可以通过使用 .format()
字符串方法来实现:
template.format(a=a, b=b, c=c, d=d, e=e, f=f)
但是,我正在寻找一种更简洁的表达方式。
如果变量是全局变量,则将 **kwargs
与 globals()
结合使用:
template.format(**globals())
但是,我正在寻找适用于局部变量或全局变量的东西——简洁的东西,它有效地产生与使用 f 字符串文字相同的结果,例如:
template = f'{a} or {b} but not {c}; {d} and {e}, not {f}'
同样,f 字符串在这种情况下不起作用,因为在定义 template
时字母变量尚未定义。
谢谢!
您可以通过这种方式重新创建 f 弦:
result = eval("f'{}'".format(template))
定义完所有变量后就可以使用它了。这基本上是一种更方便的方法 template.format(a=a, b=b, c=c, d=d, e=e, f=f)
您可以使用 locals()
。在模块级别,locals()
和 globals()
是同一个字典。
更新:如果一些变量在全局变量中,而其中一些变量在本地变量中,您可以使用新的 |
运算符将它们合并:
template = '{a} or {b} but not {c}; {d} and {e}, not {f}'
a = 10;b = 20;c = 30;d = 40
def fn():
e = 50;f = 60;h = 70
print(template.format(**globals() | locals()))
fn()
或
def fn():
print(template.format(**{**globals(), **locals()}))
本地字典将覆盖全局字典中的值。
我有一个像这样的 Python 字符串:
template = '{a} or {b} but not {c}; {d} and {e}, not {f}'
之后定义了变量a
、b
、c
、d
、e
、f
。它们未在 template
之前定义,因此我不能使用 f 字符串文字。我想将它们的值代入 template
.
这可以通过使用 .format()
字符串方法来实现:
template.format(a=a, b=b, c=c, d=d, e=e, f=f)
但是,我正在寻找一种更简洁的表达方式。
如果变量是全局变量,则将 **kwargs
与 globals()
结合使用:
template.format(**globals())
但是,我正在寻找适用于局部变量或全局变量的东西——简洁的东西,它有效地产生与使用 f 字符串文字相同的结果,例如:
template = f'{a} or {b} but not {c}; {d} and {e}, not {f}'
同样,f 字符串在这种情况下不起作用,因为在定义 template
时字母变量尚未定义。
谢谢!
您可以通过这种方式重新创建 f 弦:
result = eval("f'{}'".format(template))
定义完所有变量后就可以使用它了。这基本上是一种更方便的方法 template.format(a=a, b=b, c=c, d=d, e=e, f=f)
您可以使用 locals()
。在模块级别,locals()
和 globals()
是同一个字典。
更新:如果一些变量在全局变量中,而其中一些变量在本地变量中,您可以使用新的 |
运算符将它们合并:
template = '{a} or {b} but not {c}; {d} and {e}, not {f}'
a = 10;b = 20;c = 30;d = 40
def fn():
e = 50;f = 60;h = 70
print(template.format(**globals() | locals()))
fn()
或
def fn():
print(template.format(**{**globals(), **locals()}))
本地字典将覆盖全局字典中的值。