我在一段没有注释的代码中看到了这个。有没有什么理由这样做?
new_var = u'%s' % (child.tag)
在这种情况下,child是一个实例,tag是该实例的属性。看起来使用以下方式可以更简单地完成:
new_var = unicode(child.tag)
我在一段没有注释的代码中看到了这个。有没有什么理由这样做?
new_var = u'%s' % (child.tag)
在这种情况下,child是一个实例,tag是该实例的属性。看起来使用以下方式可以更简单地完成:
new_var = unicode(child.tag)
它们是相同的,只是个人偏好的问题。就Python之禅等方面而言,两种方式都是显式地获取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'
这可能是由于代码中包含需要翻译的字符串(此时%s
是一个有用的占位符),或者预计在以后的某个时间点包含需要翻译的字符串。
它们应该产生相同的结果。我认为在Python 2.5之前并没有添加'u'前缀字符,而unicode()函数在此之前和现在都存在。此外,如果您需要指定编码类型,unicode()函数可以让您这样做。