首页 > 解决方案 > 如何在 Python 中使用嵌套的 % 打印格式和 exec?

问题描述

我不确定问题标题是否直观,但让我在这里详细解释一下。

我想使用execwithfor循环来有效地编写具有重复模式的代码。为了说明,这里有一个非常简单的例子

channels = {'q_qp': 0, 'q_qbp': 1, 'q_q': 2, 'q_qb': 3, 'q_g': 4, 'g_g': 5}

for channel in channels:
    string = """\
print '%s'
""" % channel
    exec string

这工作得很好,但是当我尝试在变量中添加格式化打印时,棘手的部分就出现了string,这里是

import time

channels = {'q_qp': 0, 'q_qbp': 1, 'q_q': 2, 'q_qb': 3, 'q_g': 4, 'g_g': 5}

for channel in channels:
    string = """\
print '%s'
nt = time.time()
print 'now the cpu time is %f' % nt
""" % channel
    exec string

显然%,第二print条语句中的语句给编译器造成了混乱。我尝试使用%%forstring将其逐字解释为百分号,但它不会选择这样做。

我想知道如何在 Python 中实现这种嵌套格式的打印,有人可以帮我吗?

提前致谢!

标签: pythonstringprintingformatting

解决方案


print 'now the cpu time is %%f' %% nt

应该可以正常工作。

但是您可以使用format来避免%符号加倍:

string = """\
print '{}'
nt = time.time()
print 'now the cpu time is %f' % nt
""".format(channel)

“游戏”是根据您的字符串包含的字符使用最佳格式。在您的情况下,您使用{}的不多,所以format是最好的方法。


推荐阅读