2017-12-01 15 views
4

私は、string.Template()や他のアプローチと比較して、構文の単純さのためにPython f-stringを使いたいと思います。しかし、私のアプリケーションでは、文字列はファイルからロードされ、変数の値は後でしか提供できません。Python fstring as function

fstringの機能を文字列定義とは別に呼び出す方法があれば?うまくいけば、以下のコードは私が達成したいと思うものをより良く説明するでしょう。

a = 5 
s1 = f'a is {a}' # prints 'a is 5' 

a = 5 
s2 = 'a is {a}' 
func(s2) # what should be func equivalent to fstring 

答えて

1

このようにフォーマットすることができます。可能な値の辞書を渡し、文字列にマップします。

dictionary = { 
    'a':[5,10,15] 
} 

def func(d): 
    for i in range(3): 
     print('a is {{a[{0}]}}'.format(i).format_map(d)) 

func(dictionary) 

印刷:

a is 5 
a is 10 
a is 15 
2

使用str.format()

好ましくは、引数を渡すことについて明示的に指定します。しかし、その場しのぎの対策として、あなたはフォーマット関数に(機能定義)ローカル変数の辞書を渡すためにlocals()を使用することができます:あなたはもちろんローカル辞書にglobals()をコピーすることができ

foo = 'bar' 
print('Foo is actually {foo}'.format(**locals())) 

、およびそれにlocals()をマージこれを使用してf-stringアプローチをより詳細にエミュレートします。

+1

代替、 ' 'fooは{FOO}です''(地元の人を())format_map –

0

ここに行く:。

In [58]: from functools import partial 

In [59]: def func(var_name, a): 
    ...:  return var_name + f' is {a}' 
    ...: 

In [60]: f = partial(func, 'a') 

In [61]: f(5) 
Out[61]: 'a is 5'