As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center用于指导。
为什么以下是有效的?

#!/usr/bin/python
def spam():
   pass

spam

我知道函数是对象,但我认为像上面这样的代码永远不会有用,而且总是错误的结果。为什么它不会在引用spam函数对象的行上导致错误?

最佳答案

每个表达式都是有效的语句。使用局部变量(不管它指的是什么)是一个有效的表达式。由于后期绑定和动态性,您无法在编译时检测它是否引用了函数或其他东西(尽管在本例中,您不需要知道这一点,因为仅仅引用一个本地永远不会做任何事情)。运行时检查将非常昂贵,毫无益处。
这就使得禁止<local variable>;形式的语句。具体禁止这种情况是不一致的,需要额外的工作,对imho没有多大帮助。我不认为技术上的原因不能做到这一点,所以它可能归结为bdfl不希望有一个特殊的情况。

09-30 09:24