2017-08-18 105 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"