我剛纔在一段未註釋的代碼中看到了這一點。有沒有理由這樣做?unicode字符串格式
new_var = u'%s' % (child.tag)
其中child是一個實例,tag是該實例的一個屬性?這似乎更簡單:
new_var = unicode(child.tag)
我剛纔在一段未註釋的代碼中看到了這一點。有沒有理由這樣做?unicode字符串格式
new_var = u'%s' % (child.tag)
其中child是一個實例,tag是該實例的一個屬性?這似乎更簡單:
new_var = unicode(child.tag)
它們是相同的,這只是一個偏好問題。就Python的Zen等而言,實際上並沒有一種「更好」的方式,因爲它們都是明確的,因爲它們獲得了child.tag
的unicode表示。機械,他們做同樣的事情:
>>> class foo(object):
def __init__(self, val):
self.val = val
def __str__(self):
return "str: %s" % self.val
def __unicode__(self):
return "unicode: %s" % self.val
>>> f = foo("bar")
>>> u'%s' % f
u'unicode: bar'
>>> unicode(f)
u'unicode: bar'
>>> '%s' % f
'str: bar'
他們應該產生相同的結果。我認爲直到Python 2.5和unicode()函數在那之前,現在都沒有添加'u'前綴字符。另外,如果你需要指定編碼類型,unicode()會讓你這樣做。
一個原因可能是,要麼使用的代碼包含一個文本字符串,它必須轉化(當時%s
是一個有用的佔位符),或預計將包含一個在稍後的點文字。