使用 Python `format` 对局部变量和全局变量进行模板化
Templating with both local and global variables using Python `format`
在 Python 能够编写像 'Foo bar {some_var} baz'.format(**locals())
这样的代码真是太好了。根据您习惯使用的其他语言,您可能已经发现它有点冗长,但如果您还想引入全局变量呢?我能做的最好的是:
GLOBAL_VAR = "Hello"
def func():
local_var = "world!"
print("{GLOBAL_VAR} {local_var}".format(**dict(locals(), **globals())))
func()
那个format(**dict(locals(), **globals())))
真是够呛。当我想按名称替换全局变量和局部变量时,是否有更简洁的方法来进行字符串模板化?
在 3.6 中,您最终将获得对字符串插值的语法级支持:
f"{GLOBAL_VAR} {local_var}" # No format(), locals(), or globals()!
截至撰写本文时,3.6 尚未发布。
在 3.5 中,您可以在同一个函数调用中为关键字参数解压两个字典:
"{GLOBAL_VAR} {local_var}".format(**globals(), **locals())
3.5 在这里是,但也许你没有使用它,或者你必须支持旧的 Python 版本。
在 3.5 以下的 Python 版本中,真的没有比这更简洁的了。
在 Python 能够编写像 'Foo bar {some_var} baz'.format(**locals())
这样的代码真是太好了。根据您习惯使用的其他语言,您可能已经发现它有点冗长,但如果您还想引入全局变量呢?我能做的最好的是:
GLOBAL_VAR = "Hello"
def func():
local_var = "world!"
print("{GLOBAL_VAR} {local_var}".format(**dict(locals(), **globals())))
func()
那个format(**dict(locals(), **globals())))
真是够呛。当我想按名称替换全局变量和局部变量时,是否有更简洁的方法来进行字符串模板化?
在 3.6 中,您最终将获得对字符串插值的语法级支持:
f"{GLOBAL_VAR} {local_var}" # No format(), locals(), or globals()!
截至撰写本文时,3.6 尚未发布。
在 3.5 中,您可以在同一个函数调用中为关键字参数解压两个字典:
"{GLOBAL_VAR} {local_var}".format(**globals(), **locals())
3.5 在这里是,但也许你没有使用它,或者你必须支持旧的 Python 版本。
在 3.5 以下的 Python 版本中,真的没有比这更简洁的了。