Python 2中的格式化字符串字面值

3
在编写Python 2.7中的一个模块时,我需要一种方法来完成以下操作:
name = "Rodrigo"
age = 34
print f"Hello {name}, your age is {age}".format()

虽然我知道我可以这样做:

print "Hello {name}, your age is {age}".format(name=name, age=age)
< p > format() 会在作用域中查找变量 name 和 age ,将它们转换为字符串(如果可能),然后粘贴到消息中。我发现Python 3.6+中已经实现了这一点,称为格式化字符串字面值。因此,我想知道(无法通过Google找到)是否有人已经对Python 2.7做了类似的方法

据我所知,这仍然是仅适用于Python 3.6及更高版本的功能。 - Christian Dean
2
一个相当不规范的版本是使用.format(dict(globals(), **locals())) - Jon Clements
2个回答

8

您可以尝试使用“hackish”方法来完成任务,该方法是通过组合内置的locals函数和字符串上的format方法实现的:

foo = "asd"
bar = "ghi"

print("{foo} and {bar}".format(**locals())

请注意,这仍然没有涵盖 Python 3.6 f-strings 的全部功能。您可以在其中执行实际的 Python 表达式。 - Christian Dean
我认为作者的目的不是要得到一个完全等价的东西,而是要复制某个已知的功能... - omu_negru
我理解@ChristianDean所说的,但我同意omu_negru的观点。我只想复制这个功能。谢谢。 - Rodrigo E. Principe

3

这里是一个自动插入变量的实现。请注意,它不支持Python 3 f-strings的任何高级功能(如属性访问):

import inspect

def fformat(string):
    caller_frame = inspect.currentframe().f_back
    names = dict(caller_frame.f_globals, **caller_frame.f_locals)
    del caller_frame
    return string.format(**names)

a = 1
foo = 'bar'
print fformat('hello {a} {foo}')
# output: "hello 1 bar"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接