Perl Vs Python变量范围 - 需要注意的问题

时间:2011-07-29 05:03:29

标签: python perl

1 个答案:

答案 0 :(得分:9)

第二个Perl示例中的行$x = shift只是覆盖了一个全局的,词法范围的变量,就像将global x添加到Python代码一样。

这与动态范围无关,还有许多其他语言与Perl具有相同的行为 - 我认为Python是一个奇怪的人,因为要求显式导入在词法范围内可见的变量名。

Perl代码的真正问题不是词法作用域,而是缺少声明的参数。使用声明的参数,就不可能忘记my,问题就会消失。

我发现Python的范围界定方法(从Python 2开始)更有问题:它是不一致的(全局变量的显式导入以获得读写绑定,而嵌套函数中的词法自动绑定,但是只读)并使关闭secon级公民。