2009-04-21 11 views
2

GroovyにはGStringの概念があります。私はこのようなコードを書くことができます:GStrings in Python

def greeting = 'Hello World' 
println """This is my first program ${greeting}""" 

私は文字列内から変数の値にアクセスできます。

私はこれをPythonでどうやって行うことができますか?

- おかげ

答えて

5

Pythonでは、可能な変数の辞書を明示的に渡す必要があります。文字列内から任意の「外部」変数にアクセスすることはできません。しかし、ローカルスコープのすべての変数を含む辞書を返す関数locals()を使用することができます。

は、実際の交換の場合は、それを行うには多くの方法があります:印刷と括弧が3.0新しさであることを

greeting = "Hello World" 

# Use this in versions prior to 2.6: 
print("My first programm; %(greeting)s" % locals()) 

# Since Python 2.6, the recommended example is: 
print("My first program; {greeting}".format(**locals())) 

# Works in 2.x and 3.x: 
from string import Template 
print(Template("My first programm; $greeting").substitute(locals())) 
+2

注;(どのようにunpythonic!) printがキーワードである前に、3.0ではそれは他の関数と同じように機能するので、括弧が必要です。これは、他の答えで、あなたがそれらのない例を見る理由です。 – unwind

+0

プリント( "私の最初のプログラム; {あいさつ}" 形式(**地元の人々())。) は、この最後の行は私にエラーを与える: はAttributeError: 'STR' オブジェクトは、あなたのためだ何の属性が 'format' – Parag

+0

を持っていません3.0ではない - 最後の例は3.0のみです。 Python 2.xで推奨されるオプションは、最初の例です。 –

3
d = {'greeting': 'Hello World'} 
print "This is my first program %(greeting)s" % d 
1

あなたは正確に...

は、私はあなたが本当に標準%ベースの置換、例えば使用され得ることができ、最も近いと考えることはできません。

greeting = "Hello World" 
print "This is my first program %s" % greeting 

これは言いましたが、Python 2.6のような新しいクラスがいくつか用意されています:異なる方法でこれを行うことができます:the string documentation for 2.6をチェックしてください。より多くのアウト。

1

あなたがテンプレートを作成しようとしている場合は、チーターに目を向けたいかもしれません。それはあなたが話すこと、同じ構文、そしてすべてを正確に行うことができます。 Pythonで

http://www.cheetahtemplate.org/

1

2.6+あなたが行うことができます。

"My name is {0}".format('Fred') 

PEP 3101をチェックしてください。