Return 关于 Python 的声明似乎不起作用(在 Spyder 上)

Return statement on Python does not seem to work (on Spyder)

我使用 Python 有一段时间了,我用过的 IDE 没有任何问题(我用过 WingIDE,现在我用 Spyder) .

但是当我开始测试我在编辑器上输入的一些代码时,今天 return 语句似乎不起作用。然后我写了更基本的测试,看看 return 做了什么,发现其他功能也不能正常工作。

例如函数,

def test():
    return 2

'''the code below is written in the editor'''
test()
print(type(test()))
print(test())

在编辑器上 运行ning 代码之后。

test() returns 'nothing'(但实际上不是'nothing/None/blank space')

type(test()) returns 'nothing'(但实际上不是'nothing/None/blank space')

print(type(test()) 打印 'class 'int' '

print(test()) 打印 2

但是当我在控制台上键入 test() 时,它 return 是 2,而当我在控制台上键入 type(test()) 时,它 return s class: int.

请注意,在我更新 Spyder 之前和之后出现相同的结果。以前,编辑器中的代码与控制台中的代码功能相同,因为在编辑器中键入 test() 时 returned 2 当我 运行 中的代码时编辑.

Python/Spyder从来没有做过这么奇怪的事,怎么回事?

这是一个可视化。编辑器中的代码

运行在控制台中显示编辑器中的代码后的结果

假设第 116-118 行缺少的输出让您不高兴:

编辑器将您的代码作为普通 python 脚本处理,这意味着语句 test() 不会打印其结果。

立即显示某些内容的结果是 python 控制台的一项特殊功能,而不是正常的 python 行为。

要实际打印结果,您必须像在第 119-120 行中那样调用 print(test())


更新:在 PyCharm 中进行了一些测试之后 我得到以下行为:

复制并粘贴到 python 控制台:

def test():
    return 2
test()
>>press enter

确实会导致空白输出,但是:

def test():
    return 2
>>press enter
test()
>>press enter

按预期打印 2。所以我的结论是 Spyder 可能没有显示 return 值,因为它正在执行多指令脚本而不是单个操作。

扩展Fabian's N.答案,Spyder有不同的评估模型:

  1. Run file,相当于python my_file.py.
  2. Run lineRun cell,它们将一行或一个单元格的内容复制到 IPython 控制台并在那里 运行。此模型不需要将 print 添加到您的代码中。