Rubyの例:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Python文字列の連結が成功したことは、私にとって冗長に思えます。
Python 3.6では、Rubyの文字列補間と同様に リテラル文字列補間 が追加されます。そのバージョンのPython(2016年末までにリリースされる予定)から始めて、 "f-strings"に式を含めることができます。
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
3.6より前のバージョンでは、これに一番近いのは
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
%
演算子は、Pythonの 文字列補間 に使用できます。最初のオペランドは補間される文字列です。2番目のオペランドは、「マッピング」、補間される値へのフィールド名のマッピングなど、さまざまなタイプを持つことができます。ここでは、ローカル変数の辞書locals()
を使用して、フィールド名name
をローカル変数としての値にマップしました。
最近のPythonバージョンの.format()
メソッドを使用した同じコードは、次のようになります。
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
string.Template
クラスもあります。
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
Python 2.6.X以降では、使いたいと思うかもしれません:
"my {0} string: {1}".format("cool", "Hello there!")
私は interpy パッケージを開発しました、それはPythonで文字列補間を可能にします。
pip install interpy
経由でインストールしてください。そして、ファイルの先頭に# coding: interpy
という行を追加してください。
例:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
文字列補間は PEP 498で指定されているようにPython 3.6に含まれています になるでしょう。あなたはこれをすることができるでしょう:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
私はSpongebobが嫌いなので、これを書くのは少し苦痛でした。 :)
Pythonの文字列補間は、Cのprintf()に似ています
あなたがしようとした場合:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
タグ%s
はname
変数に置き換えられます。印刷関数タグを確認する必要があります。 http://docs.python.org/library/functions.html
あなたもこれを持つことができます
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
import inspect
def s(template, **kwargs):
"Usage: s(string, **locals())"
if not kwargs:
frame = inspect.currentframe()
try:
kwargs = frame.f_back.f_locals
finally:
del frame
if not kwargs:
kwargs = globals()
return template.format(**kwargs)
使用法:
a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found
シモンズ:パフォーマンスが問題になる可能性があります。これは、運用ログではなく、ローカルスクリプトに役立ちます。
複製:
古いPython(2.4でテスト済み)の場合、一番の解決策がその方向を示しています。あなたはこれを行うことができます:
import string
def try_interp():
d = 1
f = 1.1
s = "s"
print string.Template("d: $d f: $f s: $s").substitute(**locals())
try_interp()
そしてあなたは
d: 1 f: 1.1 s: s
Python 3.6以降では、f文字列を使用した リテラル文字列補間 があります。
name='world'
print(f"Hello {name}!")