我喜欢IPython Notebook并且我将它用于探索性数据分析,在那里我尝试了大量不同的东西,直到工作。但是,我经常会犯同样的错误。让我把一个例子说成一个例子:
我通常会开始在IPython中进行测试:
a = 10
print a + 5
直到我得到理想的结果。一旦我开始工作,我倾向于将代码重新配置为函数:
def add5(b):
return b + 5
哪个是正确的重新定义..但是,由于代码有时非常复杂(而且很大),我最终会重命名错误而不是写:
def add5(b):
return a + 5
请注意a
而不是重命名的b
。只要a
存在于工作空间(确实存在),此函数将返回一个值。这个错误很烦人,有时需要很长时间才能意识到错误,有时甚至不可能意识到由于函数的复杂性而导致出现问题。
是否有任何单元魔法,装饰器或其他东西强制函数忽略全局变量?
我会喜欢这样的东西:
@ignore_globals ## or %%ignore_globals
def add5(b):
return a + 5
如果在函数内部未定义a
(无论是在定义还是在运行时),上述内容都会提示错误。假设工作区中存在a
(globals()
)。
这在实践中引入了另一个问题,即导入的模块和其他使用的已定义的函数和类也在{{1}中(并且应该可以访问)..