Как создать многострочную строку Python со встроенными переменными?
Я ищу чистый способ использования переменных в многострочной строке Python. Скажем, я хотел сделать следующее:
string1 = go
string2 = now
string3 = great
"""
I will $string1 there
I will go $string2
$string3
"""
Я ищу, чтобы увидеть, если есть что-то вроде $
в Perl для указания переменной в синтаксисе Python.
Если нет - каков самый чистый способ создать многострочную строку с переменными?
6 ответов:
распространенный способ-это
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()
функция более распространена, потому что она легко доступна и не требует импорта линия.
Примечание: рекомендуемый способ форматирования строк в 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.6 Ф-строк для переменных внутри multi-line или длинные однострочные строки. Вы можете вручную указать символы новой строки с помощью
\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}."""
словарь может быть передана
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)
Оба решения выше будут выводить то же самое:Я пойду туда
Я пойду сейчас
отлично
что требуется:
>>> 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