使用 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 版本中,真的没有比这更简洁的了。