Python字符串“修饰符”

时间:2012-03-21 18:23:54

标签: python django

在python字符串的前面调用了哪些“修饰符”?我不明白这些是用来做什么的。此外,由于我不知道他们叫什么,我不知道要搜索什么来了解他们(或者其他可能有的话)。

在这个例子中,“u”在返回的字符串前面表示什么?

 def __unicode__(self):
        return u'title: %s, text: %s, created:%s, tags: %s' % (self.title, self.text, self.created, self.tags)

在这个django URL示例中,“r”代表什么?

urlpatterns = patterns('',
    (r'^admin/',include(admin.site.urls)),
)

我正在学习python和django,我在示例中看到了这些,但没有解释它们代表什么。

4 个答案:

答案 0 :(得分:13)

'r'表示原始字符串,它改变了转义行为。这对于正则表达式非常有用,可以使它们更易于阅读。 'u'表示它是Unicode字符串。它们被称为 string literal prefixes

来自文档:

  

字符串文字可以选择以字母“r”或“R”为前缀;这些字符串称为原始字符串,并使用不同的规则来解释反斜杠转义序列。前缀“u”或“U”使字符串成为Unicode字符串。 Unicode字符串使用Unicode Consortium和ISO 10646定义的Unicode字符集。下面描述的一些其他转义序列在Unicode字符串中可用。 Python 2中忽略前缀'b'或'B';它表示文字应该成为Python 3中的字节文字(例如,当代码自动转换为2to3时)。 “u”或“b”前缀后面可以跟一个“r”前缀。

     

除非存在'r'或'R'前缀,否则字符串中的转义序列将根据与标准C使用的规则类似的规则进行解释。

答案 1 :(得分:3)

这些在Python 2和Python 3之间有所不同:

Python 2:

 "hello" # Normal string (8-bit characters)
u"hello" # Unicode string
r"hello" # Raw string --> Backslashes don't need to be escaped
b"hello" # treated like normal string, to ease transition from 2 to 3

Python 3:

 "hello" # Unicode string
b"hello" # Bytes object. Not a string!
r"hello" # Raw string --> Backslashes don't need to be escaped
u"hello" # Python 3.3, treated like Unicode string, to ease transition from 2 to 3

答案 2 :(得分:1)

这些被称为字符串文字:http://docs.python.org/reference/lexical_analysis.html#string-literals

例如,r''是原始的,不会有相同的转义

答案 3 :(得分:-3)

使用文档,Luke:http://docs.python.org/reference/lexical_analysis.html#string-literals

u = Unicode字符串(每个项目代表一个unicode代码点)

r =原始字符串(转义只是一个普通的字符序列,对正则表达式很有用)

b / no prefix = byte string(每个项目都是一个字节)。请注意,在python 3中,没有前缀表示unicode字符串。