今天我遇到了不同的事情。考虑这个简单的功能:
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中打印 。这是一个功能吗?这应该发生吗?这有什么好处?
答案 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