2017-07-04 7 views
0

文字列の内容が常に環境変数に依存するようにする方法はありますか?また、文字列を定義する行が実行されたときに補間されるのではありませんか?実行時だけでなく、文字列の補間

私はここで私は

my_variable = "foo" 
my_string = f"The variable is {my_variable}" 
print(my_string) 

# Output : 

何をしたいの例だ答えがfoo

my_variable = "bar" 
# Note I'm not doing "my_string = ..." again 
print(my_string) 

# The desired output : 

ある変数がバー

で、おそらく明確ではありませんよ
# The actual output : 

変数は、あなたは、このようにfooという

+1

'X = F '= X + my_variable' "変数が"'と本質的に等価である "変数は、{my_variable}です"。これは、セキュリティ上の脆弱性を回避するための仕様です。この動作をしたくない場合は、通常の文字列(f-stringではなく)を書式設定に使用し、そのたびに '.format'メソッドを呼び出すような別のメカニズムを使用する必要があります。 –

答えて

1

を意味するかは?

my_variable="foo" 
my_string = "a string containing {somevar}".format(somevar=my_variable) 
print(my_string) 
my_variable="bar" 
my_string = "a string containing {somevar}".format(somevar=my_variable) 
print(my_string) 

戻り値:

 
a string containing foo 
a string containing bar 

[編集]ああ、私が見る、あなたはmy_stringの第二の明示的な再評価を削除し、それが評価されたかのように結果をプリントアウトしたいですか?

ふりをするmy_stringを関数として定義し、my_variableパラメータを指定して文字列を再評価しないようにすることができます。それはあなたが望むように見えるだろうが、バックグラウンドで同じことをするだろう。

def my_string(somevar): 
    return "a string containing {somevar}".format(somevar=somevar) 

my_variable="foo" 
print(my_string(my_variable)) 
my_variable="bar" 
#my_string = "a string containing {somevar}".format(somevar=my_variable) 
print(my_string(my_variable)) 

戻り値:

 
a string containing foo 
a string containing bar