Python 2中的格式化字符串文本

Python 2中的格式化字符串文本,python,python-2.7,Python,Python 2.7,在用Python2.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) format()将在范围中查找变量name和age,将它们转换为字符串(如果可能)并粘贴到消息中。我发现这已经在Python 3.6+中

在用Python2.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)

format()
将在范围中查找变量
name
age
,将它们转换为字符串(如果可能)并粘贴到消息中。我发现这已经在Python 3.6+中实现,名为。因此,我想知道(在谷歌上找不到)是否有人已经为Python 2.7找到了类似的方法您可以尝试hackish方法,将内置的
locals
函数和字符串上的
format
方法结合起来:

foo = "asd"
bar = "ghi"

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

下面是一个自动插入变量的实现。请注意,它不支持Python3 f-string的任何更高级的功能(如属性访问):


顺便说一句,这仍然只是Python 3.6和更高版本的功能。一个相当粗糙的版本是使用
.format(dict(globals(),**locals())
注意,这仍然没有涵盖Python 3.6 f-strings的全部功能。你可以在它们里面执行实际的Python表达式。我不认为作者的目的是为了得到一个精确的等价物,而是为了复制一个已知的功能……我理解@ChristianDean所说的,但同意omu_Negrou的观点。我只想复制功能。谢谢
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"