我刚从文档开始学习python 2.7.11.我是做这是在那里给出的例子,但在弄糊涂了print
,并r
进行了介绍.我对如何将反斜杠显示为输出感到困惑.这与字符转义相关,但到目前为止我只是用于\b
退格,\n
新行,\\
反斜杠
这就是我所说的:
有四种不同的情况:
既不使用print
也不使用r
使用print
但不是r
使用r
但不是print
使用print
和r
并且他们都提供不同的输出.我无法理解四种情况下实际发生的事情.
两者之间没有任何联系,必然.r
引入了一个原始字符串文字,它不解析转义码,这意味着\
引号之间的a 将是\
字符串数据中的实际字符.
print
将打印出实际的字符串,而只是在>>>
提示符下键入字符串文字将导致Python隐式打印字符串的值,但它将打印为字符串文字(特殊字符转义),所以你可以把它,将其粘贴回>>>
并获得相同的字符串.
编辑:repr()
在一些评论中提到过.基本上,它意味着返回一个可以被解析回等效对象的对象的表示,而str()
更多的是针对人类可读的描述.对于内置对象,两者都预定义为合适,而对于用户对象,你可以通过定义特殊方法定义它们__repr__()
和__str__()
.
>>> obj
将打印出来repr(obj)
,同时print obj
将打印出值str(obj)
.
>>> class Foo(object): ... def __str__(self): ... return "str of Foo" ... def __repr__(self): ... return "Foo()" ... >>> f = Foo() >>> f Foo() >>> print f str of Foo >>> eval(repr(f)) Foo()
另外,关于\
es,值得注意的是Python会忽略它不知道的转义序列:
>>> [c for c in '\w'] ['\\', 'w'] >>> [c for c in '\n'] ['\n']
\n
成为一个换行符,但\w
仍然是一个反斜杠后跟一个w
.
例如,在'hello\\\world'
第一个中,第一个\
逃脱第二个,而第三个则单独留下,因为它后跟一个w
.