2017-08-18 62 views
0

虽然在Python 2.7编写模块我有一个办法,需要做格式化字符串字面量2

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()会看在变量nameage的范围内,将它们转换为字符串(如果可能)并粘贴到消息中。我发现这已经在Python 3.6+中实现了,名为Formatted String Literals。所以,我想知道(无法找到它使用Google)是否有人已试探到类似的Python 2.7

+0

AFAIK,这仍然只是一个Python 3.6和更丰富的功能。 –

+2

一个相当冒险的版本是使用'.format(dict(globals(),** locals()))' –

回答

1

您可以通过组合内置locals功能尝试做事情的的hackish方式的东西和format方法字符串:

foo = "asd" 
bar = "ghi" 

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

请注意,这仍然不包括Python 3.6 _f-strings_的全部功能。你可以在它们内部执行实际的Python表达式。 –

+0

我不认为作者的目的是要得到一个确切的等价物,而是要重现知道的功能...... –

+0

我明白@ChristianDean说什么,但同意omu_negru。我只是想重现功能。谢谢 –

1

这是一个自动插入变量的实现。需要注意的是它不支持任何的票友功能蟒蛇3架F-字符串有(如属性访问):

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"