Python - 当我在没有' print'的情况下在解释器中编写语句时会发生什么?

时间:2016-01-03 18:15:49

标签: python python-2.7

我刚从docs开始学习python 2.7.11。 我正在做那些在那里给出的例子,但是在引入printr时感到困惑。我对如何将反斜杠显示为输出感到困惑。这与字符转义相关,但到目前为止我只使用\b作为退格,\n表示新行,\\表示反斜杠

这就是我所说的:

enter image description here

有四种不同的情况:

  1. 既不使用print也不使用r

  2. 使用print但不使用r

  3. 使用r但不使用print

  4. 同时使用printr

  5. 并且所有这些都提供不同的输出。我不能理解四种情况下实际发生的事情。

1 个答案:

答案 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