【发布时间】:2012-10-20 23:13:19
【问题描述】:
可以(虽然通常不是一个好主意)创建一个将其成员定义存储在globals() 或其他字典中的类:
oddclass = type("oddclass", (object,), globals())
有没有办法对函数做同样的事情,使其所有的局部变量都存储在全局(或模块)命名空间中,而不是它自己的?
通过声明变量global,我可以一次获得一个变量的相同效果:
def myfunction():
global x
x = 10
我正在寻找的是一种通用方法来为myfunction 的所有内部变量(也适用于那些尚未在顶部声明的变量)实现相同的效果,理想情况下是某种可以轻松添加并在不再需要时移除的单衬里。
PS。我问这个问题是因为我很好奇 python 管理函数命名空间的方式。我的动机是在某些情况下将其用作临时调试帮助(具有大量本地数据的函数神秘地失败了),但不要介意:我可以像上面那样使用global .这个问题是关于python函数内部的。
【问题讨论】:
-
为什么您希望您的函数在调试时以完全不同的方式运行?您冒着
x来自一个功能干扰另一个功能的风险。 -
为什么不使用调试器作为调试辅助工具?
-
如果函数在管理复杂数据结构的过程中引发异常,则与 IDLE 捆绑的调试器无法完成检查剩余部分的任务。 (确实,一个体面的调试器会使这变得不必要)。但是可以从解释器提示符中检查全局变量。我只(手动)为即将崩溃的一个功能执行此操作,因此没有风险。
-
我已经调试了很多 Python,但从来没有这样做过。但后来我开发了自己的调试器和自动调用它的方法。见:code.google.com/p/pycopia/source/browse/…
-
有趣...好吧,那么您必须同意内置调试器还有一些不足之处! :-)