为什么在Interactive Python中返回打印到sys.stdout?

时间:2015-06-02 17:09:05

标签: python return stdout python-idle

今天我遇到了不同的事情。考虑这个简单的功能:

def hi():
    return 'hi'

如果我在Python shell中调用它,

>>> hi()
'hi'
>>> print hi()
hi

打印出“返回”值,即使它只是repr。这对我来说很奇怪,如何返回打印到stdout?所以我把它改成了要运行的脚本:

def hi():
    return 'hi'
hi()

我从终端运行了这个:

Last login: Mon Jun  1 23:21:25 on ttys000
imac:~ zinedine$ cd documents
imac:documents zinedine$ python hello.py
imac:documents zinedine$ 

看起来,没有输出。然后,我开始认为这是一个空闲的事情,所以我尝试了这个:

Last login: Tue Jun  2 13:07:19 on ttys000
imac:~ zinedine$ cd documents
imac:documents zinedine$ idle -r hello.py

以下是在空闲中显示的内容:

Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> 
>>> 

因此返回仅在交互式python shell中打印 。这是一个功能吗?这应该发生吗?这有什么好处?

5 个答案:

答案 0 :(得分:4)

首先,它不是return ning,它与功能无关。你只需要一个表达式来评估一个对象(非常惊讶!Python中的所有东西都是一个对象)。

在这种情况下,口译员可以选择要显示的内容。您使用的口译员显然使用__repr__。如果你使用IPython,你可以看到whole protocol,根据前端,确定将显示的内容。

答案 1 :(得分:3)

交互式解释器将打印您键入和执行的表达式返回的任何内容,以便于测试和调试。

Sub StacvQ()

    For SheetIndex = 1 To Sheets.Count
        Sheets(SheetIndex).Select
        Cells(9, 13).FormulaR1C1 = "=Median(R2C[-12]" & ":" & "R8C[-12])"
        Cells(9, 13).Copy
        Range(Cells(9, 13), Cells(9, 22)).Select
        ActiveSheet.Paste

    Next SheetIndex

End Sub

有关此内容的详情,请参阅维基百科上的Read–eval–print loop

答案 2 :(得分:1)

在Python的交互模式中,评估为某个值的表达式打印了repr()(表示)。这样你就可以做到:

4 + 4

而不是必须这样做:

print(4 + 4)

例外情况是表达式的计算结果为None。这不会打印出来。

你的函数调用是一个表达式,它计算函数的返回值,它不是None,因此它被打印出来。

有趣的是,这不仅适用于评估的 last 值! 任何语句由一个计算结果为某个(非None)值的表达式组成,将打印该值。即使在一个循环中:

for x in range(5): x

不同的Python命令行可以用不同的方式处理它;这就是标准Python shell的作用。

答案 3 :(得分:0)

这是交互式shell的一个功能。是的,它应该发生。好处是它使交互式开发更方便。

答案 4 :(得分:0)

大多数交互式shell使用REPL循环 - read-eval-print。

他们阅读你的输入。他们评估它。他们打印出结果。

非功能示例(使用ipython shell):

In [135]: 3+3
Out[135]: 6    # result of a math operation

In [136]: x=3    # no result from an assignment

In [137]: x
Out[137]: 3    # evaluate the variable, and print the result - its value