python - 避免 python 范围错误的策略

标签 python python-3.x scope jupyter-notebook

我在研究中广泛使用 IPython Notebooks。我发现它们是一个很棒的工具。

但是,我不止一次被变量作用域产生的微妙错误所困扰。例如,我将做一些探索性分析:

foo = 1
bar = 2
foo + bar

我认为 foo + bar 对于我的目的来说是一个有用的算法,因此我将其封装在一个函数中,以便更容易应用于更广泛的输入:

def the_function(foo, bar):
    return foo + bar

不可避免地,在从头开始构建工作流程后,我会在某个地方出现拼写错误(例如 def the_function(fooo, bar):),导致全局变量被在函数调用中使用(和/或修改)。这会导致看不见的副作用并导致虚假结果。但由于它通常会返回结果,因此可能很难找到问题实际发生的位置。

现在,我认识到这种行为是一个特性,我故意经常使用它(为了方便,或者为了必要,即函数闭包或装饰器)。但当我不断遇到错误时,我想我需要一个更好的策略来避免此类问题(当前策略=“小心”)。

例如,一种策略可能是始终在局部变量名称前面添加“_”。但我很好奇是否没有其他策略 - 甚至是“pythonic”策略,或社区鼓励的策略。

我知道 python 2.x 在范围界定方面与 python 3.x 在某些方面有所不同 - 我使用 python 3.x。

此外,策略应考虑科学计算的交互性质,就像在 IPython Notebook 场所中使用的那样。

想法?

编辑:更具体地说,我正在寻找 IPython Notebook 策略。

最佳答案

我很想把这个问题标记为太宽泛,但也许以下内容会对您有所帮助。

当您决定将一些有用的代码包装在函数中时,请编写一些测试。如果您认为该代码有用,您一定已经使用过它和一些示例。首先编写测试以免您“忘记”。

我对库模块的个人策略是在 if __name__ 中运行测试 == '__main__':语句,测试代码是否在同一个文件中或者不同文件中。我还在编程 session 期间执行该文件多次运行测试,在每个小单位的更改之后(在 Idle 或类似 IDE 中微不足道)。

使用代码检查程序,它可以捕获一些基于拼写错误的错误。 “'fooo'已设置但从未使用过”。

跟踪您所犯的特定类型的错误,分析它们并考虑个人对策,或者至少学会识别症状。

看看您的示例,当您编写函数时,不要对全局对象和参数使用相同的名称。在您的示例中,删除或更改全局“foo”和“bar”或使用其他名称作为参数名称。

关于python - 避免 python 范围错误的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29418164/

相关文章:

python - Python 中的正则表达式无法正确匹配

python - 理解为什么这个 python 代码随机工作

python - 显示形状文件

python - 应用函数仅适用于一列而不是多列?

ruby-on-rails - 使用作用域重构 has_many

Javascript html 从外部文件调用外部对象

javascript - 参数中的js命名函数,无法访问函数外

python 和 Basemap 并从 View 中删除墨西哥/加拿大

python - TypeError - Python 中的类

python - .split (",") 分隔字符串的每个字符