Этот %строковый оператор будет «устарел в Python 3.1 и позже удален» docs.python.org/release/3.0.1/whatsnew/… теперь мне интересно, какой способ является наиболее рекомендуемым для обеспечения совместимости версий и безопасности.
cregox
2
@Cawas Я знаю, что это довольно поздно, но мне нравится использовать str.format(). Пример:, query = "SELECT * FROM {named_arg}"; query.format(**kwargs)где query- строка формата, а kwargs- словарь с ключами, соответствующими named_args в строке формата.
Эдвин
4
@Cawas Да, кроме Адам использовал кортеж обозначения, где {0}, {1}, {2}и так далее соответствуют индексам кортежа 0, 1и 2, соответственно. В качестве альтернативы также можно назвать аргументы (например {named_arg}) и установить каждый из них в методе форматирования, например:'Hi {fname} {lname}!'.format(fname='John', lname='Doe')
Эдвин
2
@bignose Вы пометили оба вопроса как дубликаты друг друга, как google.com/…
Кажется, очень мало смысла давать этот повторяющийся ответ. Вот еще один: '% (string_goes_here) s привет мир% (string_goes_here) s привет мир% (string_goes_here) s'% {'string_goes_here': s,}. Существует практически бесконечное количество возможностей.
mhawke
3
mhawke: я отправил сообщение до того, как мой браузер перезагрузил страницу, поэтому я не знал, что на тот момент я не знал, что на вопрос уже был дан ответ. Не нужно быть грубым человеком !!.
Лукас С.
2
@Lucas: Я полагаю, что, возможно, вам потребовалось 13 минут, чтобы ввести свой ответ :) и спасибо за голосование против ... очень признательно.
mhawke
13
Зависит от того, что вы имеете в виду под словом «лучше». Это работает, если вашей целью является устранение избыточности.
s='foo'
string='%s bar baz %s bar baz %s bar baz'%(3*(s,))
Я предполагаю, что пример в вопросе был не о повторении «привет, мир», а о реальном шаблоне без дублирования. Вот почему я проголосовал против.
Gra
1
Fstrings
Если вы используете, Python 3.6+вы можете использовать новый так называемый, f-stringsкоторый обозначает отформатированные строки, и его можно использовать, добавив символ fв начале строки, чтобы идентифицировать это как f-строку .
price =123
name ="Jerry"print(f"{name}!!, {price} is much, isn't {price} a lot? {name}!")>Jerry!!,123is much, isn't 123 a lot? Jerry!
Основное преимущество использования f-строк заключается в том, что они более читабельны, могут быть быстрее и обеспечивать лучшую производительность:
Источник Pandas для всех: анализ данных Python, Дэниел Чен
Контрольные точки
Нет сомнений в том, что новые f-stringsболее читабельны, поскольку вам не нужно переназначать строки, но действительно ли это быстрее, как указано в упомянутой цитате?
price =123
name ="Jerry"def new():
x = f"{name}!!, {price} is much, isn't {price} a lot? {name}!"def old():
x ="{1}!!, {0} is much, isn't {0} a lot? {1}!".format(price, name)import timeit
print(timeit.timeit('new()', setup='from __main__ import new', number=10**7))print(timeit.timeit('old()', setup='from __main__ import old', number=10**7))>3.8741058271543776#new>5.861819514350163#old
Проведя 10 миллионов тестов, кажется, что новые f-stringsдействительно быстрее отображают карты.
%
строковый оператор будет «устарел в Python 3.1 и позже удален» docs.python.org/release/3.0.1/whatsnew/… теперь мне интересно, какой способ является наиболее рекомендуемым для обеспечения совместимости версий и безопасности.str.format()
. Пример:,query = "SELECT * FROM {named_arg}"; query.format(**kwargs)
гдеquery
- строка формата, аkwargs
- словарь с ключами, соответствующимиnamed_arg
s в строке формата.{0}
,{1}
,{2}
и так далее соответствуют индексам кортежа0
,1
и2
, соответственно. В качестве альтернативы также можно назвать аргументы (например{named_arg}
) и установить каждый из них в методе форматирования, например:'Hi {fname} {lname}!'.format(fname='John', lname='Doe')
Ответы:
Вы можете использовать расширенное форматирование строк , доступное в Python 2.6 и Python 3.x:
источник
result = '{st} hello world {st} hello world {st}'.format(st=incoming)
Вы можете прочитать это, чтобы понять: Операции форматирования строк .
источник
Вы можете использовать словарный тип форматирования:
источник
Зависит от того, что вы имеете в виду под словом «лучше». Это работает, если вашей целью является устранение избыточности.
источник
источник
Fstrings
Если вы используете,
Python 3.6+
вы можете использовать новый так называемый,f-strings
который обозначает отформатированные строки, и его можно использовать, добавив символf
в начале строки, чтобы идентифицировать это как f-строку .Источник Pandas для всех: анализ данных Python, Дэниел Чен
Контрольные точки
Нет сомнений в том, что новые
f-strings
более читабельны, поскольку вам не нужно переназначать строки, но действительно ли это быстрее, как указано в упомянутой цитате?Проведя 10 миллионов тестов, кажется, что новые
f-strings
действительно быстрее отображают карты.источник