Могу ли я сделать математику внутри языка Python для форматирования строк?

1

Я хотел бы сделать некоторую простую математику, пока я делаю строковое форматирование. Например

N = {'number':3}
four = '{number:d + 1}'.format(**N)

Это не работает (конечно). Есть ли способ достичь этого, о котором я не знаю?

Благодарю!

  • 7
    Хм, это за пределами строки?
  • 2
    Хорошо, мне любопытно Почему?
Показать ещё 2 комментария
Теги:

2 ответа

5
Лучший ответ

"Есть ли способ достичь этого, о котором я не знаю?" Если под "этим" вы подразумеваете кодирование некоторой математической логики в строке формата с использованием str.format, то нет - не то, что я знаю. Однако, если вы используете язык шаблонов, вы можете выразить все такие вещи, как это.

Есть миллиард различных вариантов шаблонов языков в Python, поэтому вместо того, чтобы пытаться сказать, что лучше, я позволю вам решить. См. Эту статью из вики-страницы Python: http://wiki.python.org/moin/Templating

Один из моих любимых - Jinja2, хотя это, вероятно, слишком велико для того, о чем вы говорите.

Вот пример того, как выполнить то, что вам нужно с Jinja2:

N = { 'd' : 3 }
four = Template(u'number:{{ d + 1 }}').render(**N)

Основным преимуществом системы шаблонов, таких как Jinja2, является то, что она позволяет хранить шаблоны как файлы отдельно от вашей логики управления приложениями, так что вы можете поддерживать логику представления/представления для своей программы таким образом, чтобы ограничивать или запрещать побочные эффекты от выполнения презентации.

  • 1
    Если вы когда-либо использовали Django, Jinja2 будет очень легко подобрать.
  • 0
    Спасибо за ваш комментарий. Я подумал, что вряд ли я смогу сделать то, что хотел. Кажется, что шаблонирование сработает, но это слишком для того, чего я пытаюсь достичь. Спасибо!
1

Примерно так же, как вы можете получить, следует использовать позиционные аргументы вместо аргументов ключевого слова:

four='{0:d}'.format(N['number']+1)

или более короткая старая школа:

four='%d'%(N['number']+1)

Какая у вас цель?

  • 0
    Я думал об этом, но у строки есть много вариантов, чтобы позиционные аргументы работали хорошо; Я бы быстро заблудился.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню