在Python中,我想创建一个带有嵌入式表达式的字符串块 在Ruby中,代码如下所示:
def get_val
100
end
def testcode
s=<<EOS
This is a sample string that references a variable whose value is: #{get_val}
Incrementing the value: #{get_val + 1}
EOS
puts s
end
testcode
答案 0 :(得分:4)
如果您需要的不仅仅是str.format()
和%
提供的简单字符串格式,那么templet
模块可用于插入Python表达式:
from templet import stringfunction
def get_val():
return 100
@stringfunction
def testcode(get_val):
"""
This is a sample string
that references a function whose value is: ${ get_val() }
Incrementing the value: ${ get_val() + 1 }
"""
print(testcode(get_val))
This is a sample string
that references a function whose value is: 100
Incrementing the value: 101
答案 1 :(得分:3)
使用格式化方法:
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c') # 2.7+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
'abracadabra'
按名称格式:
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
答案 2 :(得分:2)
使用format
方法:
>>> get_val = 999
>>> 'This is the string containing the value of get_val which is {get_val}'.format(**locals())
'This is the string containing the value of get_val which is 999'
**locals
将局部变量字典作为关键字参数传递。
字符串中的{get_val}
表示应该打印变量get_val
值的位置。还有其他格式选项。请参阅format
方法的docs。
这会使事情几乎和Ruby一样。 (唯一的区别是在Ruby中你必须将#
放在大括号#{get_val}
)中。
如果您需要输出递增的get_val
,除了以下内容外,我没有其他方法可以打印它:
>>> 'This is the string containing the value of get_val+1 which is {get_val_incremented}'.format(get_val_incremented = get_val + 1,**locals())
'This is the string containing the value of get_val+1 which is 1000'
答案 3 :(得分:2)
作为一名C和Ruby程序员,我喜欢经典的printf
方法:
>>> x = 3
>>> 'Sample: %d' % (x + 1)
'Sample: 4'
或者在多个参数的情况下:
>>> 'Object %(obj)s lives at 0x%(addr)08x' % dict(obj=repr(x), addr=id(x))
'Object 3 lives at 0x0122c788'
我已经可以感觉到人们会为此打败我。但是,我发现这特别好,因为它在Ruby中的工作方式相同。
答案 4 :(得分:2)
Polyglot.org为PHP,Perl,Python和Ruby回答了很多类似的问题。
答案 5 :(得分:1)
现代Python中的等效程序使用f-strings。 (f-string语法相对recent addition。)
def get_val():
return 100
def testcode():
s = f"""
This is a sample string that references a variable whose value is: {get_val()}
Incrementing the value: {get_val() + 1}
"""
print(s)
testcode()