我刚从docs开始学习python 2.7.11。
我正在做那些在那里给出的例子,但是在引入print
和r
时感到困惑。我对如何将反斜杠显示为输出感到困惑。这与字符转义相关,但到目前为止我只使用\b
作为退格,\n
表示新行,\\
表示反斜杠
这就是我所说的:
有四种不同的情况:
既不使用print
也不使用r
使用print
但不使用r
使用r
但不使用print
同时使用print
和r
并且所有这些都提供不同的输出。我不能理解四种情况下实际发生的事情。
答案 0 :(得分:5)
两者之间没有联系,必然。 r
引入了一个原始字符串文字,它不解析转义码,这意味着引号之间的\
将是字符串数据中的实际\
字符。
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
。