Вопрос по string, python – Как мне создать многострочную строку Python со встроенными переменными?

66

Я ищу чистый способ использования переменных в многострочной строке Python. Скажем, я хотел сделать следующее:

<code>string1 = go
string2 = now
string3 = great

"""
I will $string1 there
I will go $string2
$string3
"""
</code>

Я смотрю, есть ли что-то похожее на$ в Perl, чтобы указать переменную в синтаксисе Python.

Если нет - какой самый чистый способ создать многострочную строку с переменными?

Ваш Ответ

6   ответов
5

>>> 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
Ты можешь использовать.strip(), .rstrip() или же.lstrip()или используйте обратную реакцию внутри тройных кавычек, чтобы избежать создания новой строки. mystring = "quot; \ ABC \" & quot; "
Обратите внимание, что тройные кавычки""" сохраняет переводы строки, что означает, что есть дополнительный перевод строки до и послеmystring
3

from string import Template

t = Template("This is an ${example} with ${vars}")
t.substitute({ 'example': "example", 'vars': "variables"})
'This is an example with variables'
10

F-строки Python 3.6 для переменных внутримногострочный или длинные однострочные строки. Вы можете вручную указать символы новой строки, используя\n.

Variables in a multi-line string
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)

I will go there
I will go now
great

Variables in a lengthy single-line string
string1 = "go"
string2 = "now"
string3 = "great"

singleline_string = (f"I will {string1} there. "
                     f"I will go {string2}. "
                     f"{string3}.")

print(singleline_string)

I will go there. I will go now. great.

Кроме того, вы также можете создать многострочную f-строку с тройными кавычками.

multiline_string = f"""I will {string1} there.
I will go {string2}.
{string3}."""
Error: User Rate Limit Exceeded+Error: User Rate Limit Exceededstackoverflow.com/a/54564926/4561887
41

NOTE: Рекомендуемый способ форматирования строк в Python - использоватьformat()как указано впринятый ответ, Я сохраняю этот ответ в качестве примера синтаксиса в стиле C, который также поддерживается.

string1 = "go"
string2 = "now"
string3 = "great"

s = """
I will %s there
I will go %s
%s
""" % (string1, string2, string3)

print(s)

Некоторое чтение:

String formatting PEP 3101 -- Advanced String Formatting
Error: User Rate Limit Exceeded
Это все еще хорошее решение, и для многострочной интерполяции это более прямое решение. Вам не нужно ничего импортировать, и он использует обычную интерполяцию Python.
& Quot;You probably could have answered this one with a little bit of Googling& Quot; Подразумевается, что мы не нашли этот пост после Google ...
Ах, ой! Виноват!
95

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() функция более распространена, потому что она легко доступна и не требует строки импорта.

Мог бы использоватьvars() или жеlocals() как словарь в вопросе
@isbadawi Явное лучше, чем неявное. Лучше передать только те переменные, которые вам нужны. Если вы не знаете, что вам нужно, поскольку строка указана пользователем, то переменные & quot; переменные & quot; должны быть предметы вdict тем не мение.
При использовании фигурных скобок их нужно экранировать как{{this}}.
Второе решение - самое чистое ИМО. Словарь вместе с чистым именем переменной из словаря в многострочном строчке. Я буду использовать этот метод. Благодарю. Множество отличных ответов ниже тоже, но это было прекрасно. evolution
@SimeonVisser, «строка» .format (...) недопустима в старых версиях Python (например, 2.4)
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)


Оба решения выше приведут к тому же:

I'm will go there
I will go now
great

Похожие вопросы