【问题标题】:'%s' % 'somestring''%s' % '一些字符串'
【发布时间】: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']

这种字符串格式的意义何在?

【问题讨论】:

    标签: python django


    【解决方案1】:

    这只是我的一个习惯。在这些情况下,没有必要。

    【讨论】:

      【解决方案2】:

      乍一看,它看起来并不明智,但它确实具有强制结果为字符串(或 unicode 字符串)的好处,而不是以前可能的任何内容。做同样事情的另一种方法可能是在格式参数(或 unicode)上调用 str

      【讨论】:

        【解决方案3】:

        你最好问问作者Nathan Borror。这可能只是个人风格。

        在某些情况下,Django 确实为字符串使用代理对象,因此可能会强制它们使用“实际”字符串。我相信这些代理是出于 i18n/l10n 的目的(不要引用我的话,也可能是在需要之前避免数据库查找,或者其他一些原因)。

        【讨论】:

        • 在这两种情况下,它们已经是字符串。 CharacterFields 返回 unicodes,RequestDicts 返回 strs。
        【解决方案4】:

        也许作者习惯于严格类型的语言,而他在 python 中错过了它,这是他使 python 比它更严格类型的方法。

        这里 - 只为 reader 明确输入/输出参数的类型,因为只要一切都按预期工作,它对 python 本身毫无用处。

        【讨论】:

        • 对口译员没用,但那只是我很挑剔。
        • 嗯,Python 确实有一个编译器和一个解释器,但这是一个运行时的东西,所以它不会关心解释器。
        • 我的观点是提供isinstance(x,unicode) 两个表达式xu'%s' % x 在语义上是等价的。同时它们在语法上不同,处理方式也不同(生成不同的字节码)。
        【解决方案5】:

        另一个想法:也许这是考虑到未来可能的实现? self.title 和 request.GET[…] 目前已经是所需的类型,但实现细节将来可能会改变,它们可能不再是 unicode 字符串或字符串。

        现在,我会使用 str() 和 unicode(),不过……

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-24
          • 2011-06-26
          • 2010-11-30
          • 2020-09-07
          • 1970-01-01
          • 2022-01-14
          • 1970-01-01
          相关资源
          最近更新 更多