在PHP中一個可以寫:
$fruit = 'Pear';
print("Hey, $fruit!");
但是在Python是:
fruit = 'Pear'
print("Hey, {0}!".format(fruit))
有沒有辦法讓我在字符串中插入變量?如果不是,這是如何pythonic更?
的人誰得到的參考加分
在PHP中一個可以寫:
$fruit = 'Pear';
print("Hey, $fruit!");
但是在Python是:
fruit = 'Pear'
print("Hey, {0}!".format(fruit))
有沒有辦法讓我在字符串中插入變量?如果不是,這是如何pythonic更?
的人誰得到的參考加分
你現在正在做它的方式是做它pythonic的方法。您也可以使用locals字典。像這樣:
>>> fruit = 'Pear'
>>> print("Hey, {fruit}".format(**locals()))
Hey, Pear
現在看起來不是很pythonic,但它是實現您在PHP格式化中具有相同效果的唯一方法。我只是堅持你做這件事的方式。
像這樣的東西應該工作:
"%(fruit)s" % locals()
你可以得到的PHP行爲最接近的是,仍然保持你的Python禪是:
print "Hey", fruit, "!"
打印將在每一個逗號插入空格。
較常見的Python的成語是:
print "Hey %s!" % fruit
如果你有一大堆的參數,並希望他們的名字,你可以使用的字典:
print "Hey %(crowd)s! Would you like some %(fruit)s?" % { 'crowd': 'World', 'fruit': 'Pear' }
從NamespaceFormatter例如略有調整在PEP-3101:
import string
class NamespaceFormatter(string.Formatter):
def __init__(self, namespace={}):
super(NamespaceFormatter, self).__init__()
self.namespace = namespace
def get_value(self, key, args, kwds):
if isinstance(key, str):
try:
# Check explicitly passed arguments first
return kwds[key]
except KeyError:
return self.namespace[key]
else:
super(NamespaceFormatter, self).get_value(key, args, kwds)
fmt = NamespaceFormatter(globals())
fruit = 'Pear'
print fmt.format('Hey, {fruit}!')
爲:
Hey, Pear!
不要這樣做。這是unpythonic。例如,當您將翻譯添加到應用程序時,除非您自己檢查所有翻譯文件,否則無法再控制使用哪些變量。
舉個例子,如果你改變了一個局部變量,你也必須在所有的翻譯字符串中改變它。
是啊,你*可以* - 但當你在它,如何切換到「新」字符串格式? '%'-formatting將被刪除有一天... – delnan 2010-08-22 18:29:29
這看起來比我做的方式更糟 – Aillyn 2010-08-22 18:33:46
使用'locals()'是非常糟糕的風格,永遠不要這樣做。改爲將想要放入字符串的實際值傳遞給該字符串。 – Allen 2012-02-10 21:04:57