Я знаю, что это действительно простой вопрос, но я не знаю, как его погуглить.
Как я могу сделать
print '<a href="%s">%s</a>' % (my_url)
Так что my_url
используется дважды? Я предполагаю, что должен «назвать» %s
и затем использовать dict в параметрах, но я не уверен в правильном синтаксисе?
просто к сведению, я знаю, я могу просто использовать my_url
дважды в параметрах, но это не главное :)
Ответы:
В Python 2.6+ и Python 3 вы можете использовать более новый метод форматирования строк.
который спасает вас от повторения аргумента, или
если вы хотите именованные параметры.
который является строго позиционным и поставляется только с оговоркой, что аргументы format () следуют правилам Python, где сначала должны стоять безымянные аргументы, за которыми следуют именованные аргументы, за которыми следуют * args (последовательность вроде list или tuple) и затем * kwargs (dict под ключ со строками, если вы знаете, что хорошо для вас). Точки интерполяции определяются сначала путем подстановки именованных значений по их меткам, а затем позиционно из того, что осталось. Итак, вы также можете сделать это ...
Но не это ...
источник
"literal {arg1}".format(arg1="arg!")
Названный формат работает с Python 3.5, в то время как terserf"literal {arg1}"
это новая инновация в Python 3.6 или новее, AFAIK.источник
'<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
Решение в Python 3.6+
Python 3.6 вводит форматирование буквенных строк , так что вы можете форматировать именованные параметры без повторения каких-либо из ваших именованных параметров вне строки:
Это оценит
my_url
, поэтому, если он не определен, вы получитеNameError
. Фактически вместо этогоmy_url
вы можете написать произвольное выражение Python, если оно вычисляется в строку (из-за:s
кода форматирования). Если вы хотите получить строковое представление для результата выражения, которое может не быть строкой, замените:s
его!s
, как при обычном предлитеральном форматировании строки.Подробнее о форматировании литеральных строк см. PEP 498 , где он был впервые представлен.
источник
Вы будете зависимы от синтаксиса.
Также C # 6.0, разработчики EcmaScript также знакомы с этим синтаксисом.
источник
Для построения HTML-страниц вы хотите использовать шаблонизатор, а не простую интерполяцию строк.
источник
render()
методом? Ничто не говорит о том, что вы должны кормить шаблон выводаHttpResponse()
. Джанго смущающе универсален.Как и в случае со словарем, может быть полезно знать следующий формат:
print '<a href="%s">%s</a>' % (my_url, my_url)
Здесь это немного избыточно, и словарный путь, безусловно, менее подвержен ошибкам при изменении кода, но все же можно использовать кортежи для нескольких вставок. Первый
%s
заменяет первый элемент в кортеже, второй%s
заменяет второй элемент в кортеже и так далее для каждого элемента в кортеже.источник
my_url
на самом деле это вызов функции, который я не хочу оценивать дважды. Дважды не так уж плохо, но это могло бы быть легко 20 раз :)(get_my_url(), )*20
только вызывает функцию один раз и дублирует ее 20 раз.