当Python中混进一只薛定谔的猫……
本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/-fFVTgWVsydFsNu1nyxUzA Python 是一门强大的动态语言,那动态体现在哪里,强大又体现在哪里呢?除了好的方面,Python 的动态性是否还藏着一些使用陷阱呢,有没有办法识别与避免呢? 沿着它的动态特性话题,猫哥有几篇文章依次探及了:动态修改变量、动态定义函数、动态执行代码等内容,然而,当混合了变量赋值、动态赋值、命名空间、作用域、函数的编译原理等等内容时,问题就可能会变得非常棘手。 因此,这篇文章将前面一些内容融汇起来,再做一次延展的讨论,希望能够理清一些使用的细节,更深入地探索 Python 语言的奥秘。 (1)疑惑重重的例子 先看看这一个例子: # 例0 def foo(): exec('y = 1 + 1') z = locals()['y'] print(z) foo() # 输出:2 exec() 函数的代码块中定义了变量 y,这个值可以被随后的 locals() 取到,在赋值后也打印了出来。然而,在这个例子的基础上,只需做出...
