在Python,它是乏味寫:在Ruby中,Python是否有類似「string#{var}」的變量插值?
print "foo is" + bar + '.'
我可以做這樣的事情在Python?
print "foo is #{bar}."
在Python,它是乏味寫:在Ruby中,Python是否有類似「string#{var}」的變量插值?
print "foo is" + bar + '.'
我可以做這樣的事情在Python?
print "foo is #{bar}."
Python沒有做變量代換 - 這是明確的,而不是隱含的。
但是,您可以使用str.format
變量傳遞:
# Rather than this:
puts "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}
第三個人看起來整潔,但我記得這種方式有點廢棄?真的嗎? – mko 2012-08-03 02:52:17
還有懶惰的'print'foo是%(bar)s「%locals()'。 – 2012-08-03 02:58:26
@yozloy - 更正它在Python 3中已被棄用(據我瞭解)。 – 2012-08-03 02:58:41
是的,絕對。在我看來,Python對字符串格式化,替換和操作符有很大的支持。
這可能會有所幫助:
http://docs.python.org/library/stdtypes.html#string-formatting-operations
>>> bar = 1
>>> print "foo is {}.".format(bar)
foo is 1.
我從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}
)進行比較。"{}{}".format(x, y)
,"{0}{1}".format(x, y)
和"%s%s" % (x, y)
) 。這是一種很奇怪的方式來傳遞吧...雖然很整潔,但它更貼近Ruby的方式。 – Josiah 2012-08-03 02:48:45
如果您使用的是對象,這看起來像是最好的解決方案。例如,如果您報告的是urllib2.HTTPError,則可以執行'「HTTP錯誤:{error.code} {error.msg}」。format(** vars())'這不適用於format(* *當地人())' – 2014-10-03 08:27:11
有在Ruby中這之間有很大的區別:
print "foo is #{bar}."
而且這些在Python中:
print "foo is {bar}".format(bar=bar)
在Ruby示例中,bar
是評估
在Python的例子,bar
只是給你只是用變量的行爲或多或少相同的字典
在這種情況下的一個關鍵,但在一般情況下,轉換的Ruby到Python ISN沒那麼簡單
Python 3。6有introduced 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
>>>
的Python 3.6 會有有literal string interpolation使用f -strings:
print(f"foo is {bar}.")
的
爲了防止有人疑惑:是的,你可以結合這與說原始字符串,就像這樣'rf「富是{酒吧}」'。 – 2017-02-20 07:40:08
可能重複[格式的數字爲字符串在Python(http://stackoverflow.com/questions/22617/format-numbers-to-strings-in-python) – 2012-08-03 02:36:06
我想我已經找到了解決方案,你會檢查出來嗎? http://stackoverflow.com/questions/16504732/how-could-i-make-my-python-string-interpolation-implementation-work-accross-impo – SalchiPapa 2013-05-12 10:25:33
的[可能的複製是否有一個Python等同於Ruby的字符串插入?](https://stackoverflow.com/questions/4450592/is-there-a-python-equivalent-to-rubys-string-interpolation) – josemigallas 2017-06-15 08:46:42