2011-02-18 52 views
3

我剛纔在一段未註釋的代碼中看到了這一點。有沒有理由這樣做?unicode字符串格式

new_var = u'%s' % (child.tag) 

其中child是一個實例,tag是該實例的一個屬性?這似乎更簡單:

new_var = unicode(child.tag) 

回答

2

它們是相同的,這只是一個偏好問題。就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' 
1

他們應該產生相同的結果。我認爲直到Python 2.5和unicode()函數在那之前,現在都沒有添加'u'前綴字符。另外,如果你需要指定編碼類型,unicode()會讓你這樣做。

2

一個原因可能是,要麼使用的代碼包含一個文本字符串,它必須轉化(當時%s是一個有用的佔位符),或預計將包含一個在稍後的點文字。