Пример Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Успешная конкатенация строк Python, по-видимому, многословна для меня.
Пример Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Успешная конкатенация строк Python, по-видимому, многословна для меня.
Python 3.6 добавит литералную интерполяцию строк, подобную интерполяции строк Ruby. Начиная с этой версии Python (которая должна быть выпущена к концу 2016 года), вы сможете включать выражения в "f-строки", например.
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
До 3.6 наиболее близким к этому может быть
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
Оператор %
может использоваться для строковой интерполяции в Python. Первый операнд - это строка, подлежащая интерполированию, вторая может иметь разные типы, включая "сопоставление", имена полей отображения для интерполированных значений. Здесь я использовал словарь локальных переменных locals()
для сопоставления имени поля name
с его значением как локальной переменной.
Тот же код с использованием метода .format()
последних версий Python будет выглядеть так:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
Существует также класс string.Template
:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
С Python 2.6.X вы можете использовать:
"my {0} string: {1}".format("cool", "Hello there!")
Я разработал пакет interpy, который поддерживает строчную интерполяцию в Python.
Просто установите его через pip install interpy
.
А затем добавьте строку # coding: interpy
в начало ваших файлов!
Пример:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
Строковая интерполяция будет включена в Python 3.6, как указано в PEP 498. Вы сможете это сделать:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Обратите внимание, что я ненавижу SpongeBob, поэтому писать это было немного больно.:)
Интерполяция строк Python аналогична C printf()
Если вы попытаетесь:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
Тег %s
будет заменен переменной name
. Вы должны взглянуть на теги функции печати: http://docs.python.org/library/functions.html
import inspect
def s(template, **kwargs):
"Usage: s(string, **locals())"
if not kwargs:
frame = inspect.currentframe()
try:
kwargs = frame.f_back.f_locals
finally:
del frame
if not kwargs:
kwargs = globals()
return template.format(**kwargs)
Использование:
a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found
PS: производительность может быть проблемой. Это полезно для локальных скриптов, а не для журналов производства.
Дублированный:
Вы также можете использовать этот
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
Для старого Python (проверенного на 2.4) верхнее решение указывает путь. Вы можете сделать это:
import string
def try_interp():
d = 1
f = 1.1
s = "s"
print string.Template("d: $d f: $f s: $s").substitute(**locals())
try_interp()
И вы получаете
d: 1 f: 1.1 s: s