【发布时间】:2011-06-14 02:51:01
【问题描述】:
我对以下行为感到有些惊讶:
def main():
print "%s" % foo
if __name__ == "__main__":
foo = "bar"
main()
即模块函数可以访问__main__ 中的封闭变量。对此有何解释?
【问题讨论】:
-
没有范围
__main__。有一个if恰好将一个恰好被称为__name__的变量与恰好是字符串文字"__main__"的变量进行比较。 -
@delnan:
__main__是一个模块,每个模块都有一个关联的范围。在解释器中尝试import __main__; type(__main__)(不是在 IPython 中)。 -
@Sven:我知道。 OP应该在某个时候知道。但在我看来,OP 反而将 if 语句与部分条件混淆,并认为
if引入了一个新的范围——这将是一个更紧迫的问题。 (诚然,“严格来说,“没有范围__main__具有误导性) -
@delnan:你是对的。回想起来,我不知道我为什么感到困惑。也许在凌晨 3 点调试代码毕竟不是一个好主意 :)
-
我只是偶然发现了这种完全相同的行为......以为我快疯了。很高兴看到其他人已经问过这个问题!解释答案时行为很明显......