在看第二次世界大战给出的答案时,我评论了他的缩进,说那是错误的。但是,在我的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节“自动缩进”,该文档对找到答案没有帮助。
此外,关于函数的Python文档指出必须缩进函数体:
关键字def引入函数定义。它后面必须是函数名称和形式参数的括号列表。构成函数主体的语句从下一行开始,并且必须缩进。
(强调我的)
为什么在IDLE中允许这种缩进,但是在常规脚本中完全将其关闭?这是故意的吗?如果是这样,此行为是否记录在某处?
在>>>
您在IDLE看到的只是一个提示。碰巧的是,此提示恰好是四个字符长,并且您恰巧也在代码上缩进了四个空格。
要查看和思考代码的实际工作方式,让我们删除所有>>>
提示。为了清楚起见,我们也将删除打印结果。
现在看起来完全是正常的Python代码:
def foo():
return 0
foo()
def bar():
return foo() + 5
bar()
def foobar():
return foo() + bar()
foobar()
因此,IDLE与任何其他Python解释器都没有什么不同,它只是将>>>
提示放在第一行的方式,仅使它令人困惑。如果考虑删除这四个字符后的代码外观,这将更有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句