【发布时间】:2010-01-15 03:45:29
【问题描述】:
这里有几个来自django-basic-apps的例子:
# self.title is a unicode string already
def __unicode__(self):
return u'%s' % self.title
# 'q' is a string
search_term = '%s' % request.GET['q']
这种字符串格式的意义何在?
【问题讨论】:
这里有几个来自django-basic-apps的例子:
# self.title is a unicode string already
def __unicode__(self):
return u'%s' % self.title
# 'q' is a string
search_term = '%s' % request.GET['q']
这种字符串格式的意义何在?
【问题讨论】:
这只是我的一个习惯。在这些情况下,没有必要。
【讨论】:
乍一看,它看起来并不明智,但它确实具有强制结果为字符串(或 unicode 字符串)的好处,而不是以前可能的任何内容。做同样事情的另一种方法可能是在格式参数(或 unicode)上调用 str。
【讨论】:
你最好问问作者Nathan Borror。这可能只是个人风格。
在某些情况下,Django 确实为字符串使用代理对象,因此可能会强制它们使用“实际”字符串。我相信这些代理是出于 i18n/l10n 的目的(不要引用我的话,也可能是在需要之前避免数据库查找,或者其他一些原因)。
【讨论】:
也许作者习惯于严格类型的语言,而他在 python 中错过了它,这是他使 python 比它更严格类型的方法。
这里 - 只为 reader 明确输入/输出参数的类型,因为只要一切都按预期工作,它对 python 本身毫无用处。
【讨论】:
isinstance(x,unicode) 两个表达式x 和u'%s' % x 在语义上是等价的。同时它们在语法上不同,处理方式也不同(生成不同的字节码)。
另一个想法:也许这是考虑到未来可能的实现? self.title 和 request.GET[…] 目前已经是所需的类型,但实现细节将来可能会改变,它们可能不再是 unicode 字符串或字符串。
现在,我会使用 str() 和 unicode(),不过……
【讨论】: