【发布时间】:2017-04-18 01:53:29
【问题描述】:
looking at an answer given by wwii 时,我评论他的缩进说这是错误的。然而,在我的 IDLE 中运行他的代码后,我发现它运行顺利。
我尝试了几个示例,以确保得到正确的结果:
>>> def foo():
return 0
>>> foo()
0
>>> def bar():
return foo() + 5
>>> bar()
5
>>> def foobar():
return foo() + bar()
>>> foobar()
5
>>>
如您所见,它们都运行良好。如果我在常规脚本中尝试相同的操作,Python 甚至会在我的程序运行之前引发错误,告诉我我忘记缩进一个块:
为什么在交互式 IDLE 中允许这种缩进,而在常规脚本中却不允许?我查看了 IDLE 的文档,更具体地说是 25.5.2.1 Automatic indentation 部分,这对找到答案没有帮助。
此外,the Python documenation on functions 声明函数体必须缩进:
关键字 def 引入了一个函数定义。它后面必须跟函数名和带括号的形式参数列表。构成函数主体的语句从下一行开始,必须缩进。
(强调我的)
为什么IDLE中允许这种缩进,而在正则脚本中却完全关闭?这是故意的吗?如果是这样,这种行为是否记录在某处?
【问题讨论】:
-
我猜提示
>>>在处理之前已从第一行删除。虽然很烦人。 -
@wwii 当然是。但这似乎比烦人更令人困惑。
-
我被曝光为一个闲散的程序员。
-
您最初的困惑是为什么 IDLE 在 shell 中使用 8 空格制表符缩进——所以后续行看起来是物理缩进的。我希望有一天能将 '>>> ' 提示与其他符号一起放在一个明显的空白处。然后缩进将与编辑器中的空格缩进相同,并且可以选择在没有提示的情况下保存或复制代码,因此可以从编辑器窗口运行。
标签: python python-3.5 python-idle python-interactive ident