Как создать многострочную строку Python со встроенными переменными?
Я ищу чистый способ использования переменных в многострочной строке Python. Скажем, я хотел бы сделать следующее:
string1 = go
string2 = now
string3 = great
"""
I will $string1 there
I will go $string2
$string3
"""
Я смотрю, есть ли что-то похожее на $
в Perl, чтобы указать переменную в синтаксисе Python.
Если нет - что является самым чистым способом создания многострочной строки с переменными?
Ответы
Ответ 1
Распространенным способом является функция format()
:
>>> s = "This is an {example} with {vars}".format(vars="variables", example="example")
>>> s
'This is an example with variables'
Он отлично работает со строкой многострочного формата:
>>> s = '''\
... This is a {length} example.
... Here is a {ordinal} line.\
... '''.format(length='multi-line', ordinal='second')
>>> print(s)
This is a multi-line example.
Here is a second line.
Вы также можете передать словарь с переменными:
>>> d = { 'vars': "variables", 'example': "example" }
>>> s = "This is an {example} with {vars}"
>>> s.format(**d)
'This is an example with variables'
Ближе всего к тому, что вы просили (с точки зрения синтаксиса), это строки шаблона. Например:
>>> from string import Template
>>> t = Template("This is an $example with $vars")
>>> t.substitute({ 'example': "example", 'vars': "variables"})
'This is an example with variables'
Я должен добавить, что функция format()
более распространена, потому что она легко доступна и не требует строки импорта.
Ответ 2
ПРИМЕЧАНИЕ. Рекомендуемый способ форматирования строк в Python - использовать format()
, как указано в принятом ответе. Я сохраняю этот ответ в качестве примера синтаксиса в стиле C, который также поддерживается.
# NOTE: format() is a better choice!
string1 = "go"
string2 = "now"
string3 = "great"
s = """
I will %s there
I will go %s
%s
""" % (string1, string2, string3)
print(s)
Некоторое чтение:
Ответ 3
Вы можете использовать Python 3.6 f-строки для переменных внутри многострочных или длинных однострочных строк. Вы можете вручную указать символы новой строки, используя \n
.
Переменные в многострочной строке
string1 = "go"
string2 = "now"
string3 = "great"
multiline_string = (f"I will {string1} there\n"
f"I will go {string2}.\n"
f"{string3}.")
print(multiline_string)
я пойду туда
я пойду сейчас
отличный
Переменные в длинной однострочной строке
string1 = "go"
string2 = "now"
string3 = "great"
singleline_string = (f"I will {string1} there. "
f"I will go {string2}. "
f"{string3}.")
print(singleline_string)
Я пойду туда. Я пойду сейчас. отличный.
Кроме того, вы также можете создать многострочную f-строку с тройными кавычками.
multiline_string = f"""I will {string1} there.
I will go {string2}.
{string3}."""
Ответ 4
Это то, что вы хотите:
>>> string1 = "go"
>>> string2 = "now"
>>> string3 = "great"
>>> mystring = """
... I will {string1} there
... I will go {string2}
... {string3}
... """
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'string3': 'great', '__package__': None, 'mystring': "\nI will {string1} there\nI will go {string2}\n{string3}\n", '__name__': '__main__', 'string2': 'now', '__doc__': None, 'string1': 'go'}
>>> print(mystring.format(**locals()))
I will go there
I will go now
great
Ответ 5
Словарь можно передать в format()
, каждое имя ключа станет переменной для каждого связанного значения.
dict = {'string1': 'go',
'string2': 'now',
'string3': 'great'}
multiline_string = '''I'm will {string1} there
I will go {string2}
{string3}'''.format(**dict)
print(multiline_string)
Также список можно передать в format()
, номер индекса каждого значения будет использоваться в качестве переменных в этом случае.
list = ['go',
'now',
'great']
multiline_string = '''I'm will {0} there
I will go {1}
{2}'''.format(*list)
print(multiline_string)
Оба вышеприведенных решения будут выводить то же самое:
Я пойду туда
Я пойду сейчас
большой
Ответ 6
Я думаю, что ответ выше забыл {}:
from string import Template
t = Template("This is an ${example} with ${vars}")
t.substitute({ 'example': "example", 'vars': "variables"})
'This is an example with variables'