Как использовать вложенный формат% печати с exec в Python? - PullRequest
0 голосов
/ 30 апреля 2019

Я не уверен, что заголовок вопроса интуитивно понятен, но позвольте мне объяснить его здесь подробно.

Я хотел бы использовать exec с циклом for для эффективной записи кода с повторяющимися шаблонами. Для иллюстрации приведу очень простой пример

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 вызывает путаницу в компиляторе. Я попытался использовать %% вместо string, чтобы интерпретировать его буквально как знак процента, но он не выбрал бы это.

Мне интересно, как эта вложенная форматированная печать могла быть реализована в Python, может кто-нибудь помочь мне?

Заранее спасибо!

1 Ответ

1 голос
/ 30 апреля 2019
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 - лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...