Powszechnym sposobem jest format()
funkcja:
>>> s = "This is an {example} with {vars}".format(vars="variables", example="example")
>>> s
'This is an example with variables'
Działa dobrze z wieloliniowym ciągiem formatu:
>>> 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.
Możesz również przekazać słownik ze zmiennymi:
>>> d = { 'vars': "variables", 'example': "example" }
>>> s = "This is an {example} with {vars}"
>>> s.format(**d)
'This is an example with variables'
Najbliższą rzeczą, o którą prosiłeś (pod względem składni), są ciągi szablonów . Na przykład:
>>> from string import Template
>>> t = Template("This is an $example with $vars")
>>> t.substitute({ 'example': "example", 'vars': "variables"})
'This is an example with variables'
Powinienem jednak dodać, że format()
funkcja jest bardziej powszechna, ponieważ jest łatwo dostępna i nie wymaga linii importu.
vars()
lublocals()
jako słownika, o którym mowadict
tak elementy.{{this}}
.UWAGA : Zalecanym sposobem formatowania ciągów w Pythonie jest użycie
format()
, jak opisano w zaakceptowanej odpowiedzi . Zachowuję tę odpowiedź jako przykład obsługiwanej składni w stylu 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)
Trochę czytania:
źródło
Możesz użyć f-stringów Pythona 3.6 dla zmiennych wewnątrz wieloliniowych lub długich jednowierszowych łańcuchów. Możesz ręcznie określić znaki nowego wiersza za pomocą
\n
.Zmienne w ciągu wieloliniowym
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)
Zmienne w długim ciągu jednowierszowym
string1 = "go" string2 = "now" string3 = "great" singleline_string = (f"I will {string1} there. " f"I will go {string2}. " f"{string3}.") print(singleline_string)
Alternatywnie możesz również utworzyć wielowierszowy f-string z potrójnymi cudzysłowami.
multiline_string = f"""I will {string1} there. I will go {string2}. {string3}."""
źródło
+
do konkatenacji): stackoverflow.com/a/54564926/4561887To jest to, czego chcesz:
>>> 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
źródło
"""
zachowują znaki nowej linii, co oznacza, że istnieje dodatkowymystring
.strip()
,.rstrip()
lub.lstrip()
, lub użyć luzu wewnątrz potrójnych cudzysłowów, aby uniknąć tworzenia nowej linii. mystring = "" "\ ABC \" ""Do słownika można przekazać
format()
, każda nazwa klucza stanie się zmienną dla każdej skojarzonej wartości.dict = {'string1': 'go', 'string2': 'now', 'string3': 'great'} multiline_string = '''I'm will {string1} there I will go {string2} {string3}'''.format(**dict) print(multiline_string)
Można również przekazać listę
format()
, numer indeksu każdej wartości zostanie użyty jako zmienne w tym przypadku.list = ['go', 'now', 'great'] multiline_string = '''I'm will {0} there I will go {1} {2}'''.format(*list) print(multiline_string)
Oba powyższe rozwiązania dadzą to samo:
źródło
f-stringi , zwane także „sformatowanymi literałami łańcuchowymi”, są literałami łańcuchowymi, które mają
f
na początku znak; i nawiasy klamrowe zawierające wyrażenia, które zostaną zastąpione ich wartościami.Ciągi f są oceniane w czasie wykonywania.
Możesz więc przepisać swój kod jako:
string1="go" string2="now" string3="great" print(f""" I will {string1} there I will go {string2} {string3} """)
A to da następującą ocenę:
Możesz dowiedzieć się więcej na ten temat tutaj .
źródło
Jeśli ktoś przyszedł tutaj z klienta python-graphql, szukając rozwiązania do przekazania obiektu jako zmiennej, oto czego użyłem:
query = """ {{ pairs(block: {block} first: 200, orderBy: trackedReserveETH, orderDirection: desc) {{ id txCount reserveUSD trackedReserveETH volumeUSD }} }} """.format(block=''.join(['{number: ', str(block), '}'])) query = gql(query)
Upewnij się, że nie używasz wszystkich nawiasów klamrowych, tak jak ja: „{{", "}}"
źródło