我正在寻找一种在多行Python字符串中使用变量的简洁方法。说我想做以下事情:
string1 = go
string2 = now
string3 = great
"""
I will $string1 there
I will go $string2
$string3
"""
我正在查看Perl中是否有与$
类似的内容来表示Python语法中的变量。
如果不是 - 用变量创建多行字符串的最简洁方法是什么?
答案 0 :(得分:103)
常见的方法是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'
与您提出的问题(语法方面)最接近的是template strings。例如:
>>> 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()
函数更常见,因为它很容易获得并且不需要导入行。
答案 1 :(得分:42)
注意:在Python中进行字符串格式化的推荐方法是使用format()
,如the accepted answer中所述。我保留这个答案作为同样支持的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)
一些阅读:
答案 2 :(得分:14)
您可以将auto specifier用于Python 3.6's f-strings内的变量或冗长的单行字符串。您可以使用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)
我会去那里 我现在要去 大
multiline_string = f"""I will {string1} there.
I will go {string2}.
{string3}."""
我会去那里。我要走了。大。
或者,您也可以创建带有三引号的多行f字符串。
belongsTo()
答案 3 :(得分:6)
这就是你想要的:
>>> 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
答案 4 :(得分:6)
字典可以传递给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)
上述两种解决方案都会输出相同的内容:
我会去那里 我现在要去 大
答案 5 :(得分:3)
f字符串,也称为“格式化的字符串文字”,是开头为f
的字符串文字。和大括号包含将被其值替换的表达式。
f字符串在运行时求值。
因此您的代码可以重写为:
string1="go"
string2="now"
string3="great"
print(f"""
I will {string1} there
I will go {string2}
{string3}
""")
这将评估为:
I will go there
I will go now
great
您可以进一步了解here。
答案 6 :(得分:1)
如果有人从python-graphql客户端来到这里,寻找将对象作为变量传递的解决方案,这就是我使用的方法:
query = """
{{
pairs(block: {block} first: 200, orderBy: trackedReserveETH, orderDirection: desc) {{
id
txCount
reserveUSD
trackedReserveETH
volumeUSD
}}
}}
""".format(block=''.join(['{number: ', str(block), '}']))
query = gql(query)
请确保像我一样将所有花括号都转义:“ {{”,“}}”