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

时间:2017-04-17 13:58:08

标签: python anaconda spyder

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

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

例如,对于函数,

def test():
    return 2

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

在编辑器上运行代码后。

test()返回'nothing'(但实际上并非'无/无/空格')

type(test())返回'nothing'(但实际上并非'无/无/空格')

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

print(test())打印2

但是当我在控制台上输入test()时,它会返回2,当我在控制台上输入type(test())时,它会返回class: int

请注意,在我更新Spyder之前和之后会出现相同的结果。之前,编辑器中的代码与控制台中的代码的运行方式相同,就像在编辑器中键入test()时在编辑器中运行代码时返回2一样。

Python / Spyder之前没有做过任何奇怪的事情,发生了什么?

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

enter image description here

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

enter image description here

2 个答案:

答案 0 :(得分:1)

假设第116-118行的缺失输出让你感到不安:

编辑器将您的代码作为普通的python脚本处理,这意味着ala 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可能没有显示返回值,因为它正在执行多指令脚本而不是单个操作。

答案 1 :(得分:1)

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

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