在查看 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部分,这对找到答案没有帮助。
此外,函数的 Python 文档指出函数体必须缩进:
关键字 def 引入了一个函数定义。它后面必须跟函数名和带括号的形式参数列表。构成函数主体的语句从下一行开始,并且必须缩进。
(强调我的)
为什么在IDLE中允许这种缩进,而在正则脚本中却完全关闭?这是故意的吗?如果是这样,这种行为是否记录在某处?