Строковое форматирование названных параметров?

Я знаю, что это очень простой вопрос, но я понятия не имею, как это сделать.

как я могу сделать

print '<a href="%s">%s</a>' % (my_url)

Итак, что my_url используется дважды? Я предполагаю, что мне нужно "называть" %s, а затем использовать dict в параметрах, но я не уверен в правильном синтаксисе?


просто FYI, я знаю, что могу просто использовать my_url дважды в параметрах, но это не точка:)

Ответ 1

print '<a href="%(url)s">%(url)s</a>' % {'url': my_url}

Ответ 2

В Python 2.6+ и Python 3 вы можете использовать новый метод форматирования строк.

print('<a href="{0}">{0}</a>'.format(my_url))

что избавляет вас от повторения аргумента или

print('<a href="{url}">{url}</a>'.format(url=my_url))

если вам нужны именованные параметры.

print('<a href="{}">{}</a>'.format(my_url, my_url))

который является строго позиционным и содержит только оговорку о том, что аргументы format() следуют правилам Python, в которых должны быть указаны неназванные аргументы, за которыми следуют именованные аргументы, за которыми следуют * args (последовательность, подобная списку или кортежу), а затем * kwargs (диктофон с строками, если вы знаете, что хорошо для вас). Точки интерполяции определяются сначала, подставляя именованные значения на свои метки, а затем позиционные из оставшихся. Итак, вы также можете сделать это...

print('<a href="{not_my_url}">{}</a>'.format(my_url, my_url, not_my_url=her_url))

Но не это...

print('<a href="{not_my_url}">{}</a>'.format(my_url, not_my_url=her_url, my_url))

Ответ 3

Решение в Python 3.6 +

Python 3.6 вводит строковое форматирование строки, так что вы можете отформатировать именованные параметры, не повторяя ни одного из ваших именованных параметров вне строки:

print(f'<a href="{my_url}">{my_url}</a>')

См. форматирование литерала, PEP 498

Ответ 4

Для создания HTML-страниц вы хотите использовать механизм шаблонов, а не просто строку интерполяции.

Ответ 5

Вы будете зависимы от синтаксиса.

Также С# 6.0 разработчики EcmaScript также знакомы с этим синтаксисом.

In [1]: print '{firstname} {lastname}'.format(firstname='Mehmet', lastname='Ağa')
Mehmet Ağa

In [2]: print '{firstname} {lastname}'.format(**dict(firstname='Mehmet', lastname='Ağa'))
Mehmet Ağa

Ответ 6

Как и словарь, полезно знать следующий формат:

print '<a href="%s">%s</a>' % (my_url, my_url)

Здесь это немного избыточно, а способ словаря, конечно же, меньше подвержен ошибкам при модификации кода, но по-прежнему можно использовать кортежи для нескольких вставок. Первый %s заменяется первым элементом в кортеже, второй %s заменяется вторым элементом в кортеже и так далее для каждого элемента в кортеже.