web-dev-qa-db-ja.com

Python Rubyの「string#{var}」に似た変数補間を行いますか?

Pythonでは、次のように書くのは面倒です。

print "foo is" + bar + '.'

Pythonでこのようなことができますか?

print "foo is #{bar}."

33
mko

Python 3.6以降には変数補間があります-fを文字列の先頭に追加します:

f"foo is {bar}"

Python以下(Python 2-3.5)のバージョンでは、str.format変数を渡すには:

# Rather than this:
print("foo is #{bar}")

# You would do this:
print("foo is {}".format(bar))

# Or this:
print("foo is {bar}".format(bar=bar))

# Or this:
print("foo is %s" % (bar, ))

# Or even this:
print("foo is %(bar)s" % {"bar": bar})
48
Sean Vieira

Python 3.6 持つでしょう リテラル文字列補間 usingf-strings

print(f"foo is {bar}.")
25
AXO

Python 3.6には f-stringsが導入されました

_print(f"foo is {bar}.")
_

古い答え:

バージョン3.2以降Pythonには _str.format_map_ があり、これは locals() または globals() を使用すると、高速に実行できます。

_Python 3.3.2+ (default, Feb 28 2014, 00:52:16) 
>>> bar = "something"
>>> print("foo is {bar}".format_map(locals()))
foo is something
>>> 
_
10
warvariuc

Python Essential Reference から次のテクニックを学びました。

>>> bar = "baz"
>>> print "foo is {bar}.".format(**vars())
foo is baz.

これは、書式設定文字列で多くの変数を参照する場合に非常に便利です。

  • 引数リスト内のすべての変数を再度繰り返す必要はありません。明示的なキーワード引数ベースのアプローチ("{x}{y}".format(x=x, y=y)"%(x)%(y)" % {"x": x, "y": y}など)と比較してください。
  • 引数リスト内の変数の順序が書式設定文字列内の順序と一致している場合、1つずつ確認する必要はありません。それを位置引数ベースのアプローチ("{}{}".format(x, y)"{0}{1}".format(x, y)および"%s%s" % (x, y))。
8
dkim

文字列のフォーマット

>>> bar = 1
>>> print "foo is {}.".format(bar)
foo is 1.
5
Josiah

変数を2回参照することで繰り返す必要がないため、このアプローチが好まれます。

 alpha = 123 
 print '答えは{alpha}'です。format(** locals())
2
Chris Johnson

Rubyではこれには大きな違いがあります。

print "foo is #{bar}."

そしてこれらはPythonで:

print "foo is {bar}".format(bar=bar)

Ruby=の例では、bar評価済み
Pythonの例では、barは辞書のキーにすぎません

変数を使用している場合は、ほぼ同じ動作をしますが、一般的に、RubyからPythonへの変換はそれほど単純ではありません

2
John La Rooy

そのとおり。私の意見では、Pythonは文字列のフォーマット、置換、演算子を強力にサポートしています。

これは役に立つかもしれません:
http://docs.python.org/library/stdtypes.html#string-formatting-operations

0
Edmon