gpt4 book ai didi

python - Python 中 devar 的模拟

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:52 27 4
gpt4 key购买 nike

在编写 Python 代码时,我经常发现自己想要获得类似于 Lisp 的 defvar 的行为。基本上,如果某个变量不存在,我想创建它并为其分配一个特定的值。否则,我不想做任何事情,特别是,我不想覆盖变量的当前值。

我在网上四处寻找,发现了这个建议:

try:
some_variable
except NameError:
some_variable = some_expensive_computation()

我一直在使用它,效果很好。但是,对我来说,这看起来是范式不正确的代码。代码是四行,而不是 Lisp 中所需的 1 行,并且它需要异常处理来处理不是“异常”的事情。

上下文是我正在进行交互式开发。我经常执行我的 Python 代码文件,因为我改进了它,我不想每次都运行 some_expensive_computation() 。我可以安排在每次启动新的 Python 解释器时手动运行 some_expensive_computation(),但我宁愿做一些自动化的事情,特别是这样我的代码就可以非交互地运行。熟练的 Python 程序员将如何实现这一点?

我在 SP3 中使用 WinXP,通过 Anaconda 1.6.2(32 位)使用 Python 2.7.5,并在 Spyder 中运行。

最佳答案

依赖具有意义的变量的存在与否通常不是一个好主意。相反,使用标记值来指示变量未设置为适当的值。 None 是这种哨兵的常见选择,但如果这是昂贵计算的可能输出,则可能不合适。

因此,不要使用您当前的代码,而是执行如下操作:

# early on in the program
some_variable = None

# later:
if some_variable is None:
some_variable = some_expensive_computation()

# use some_variable here

或者,None 可能是一个重要值的版本:

_sentinel = object()
some_variable = _sentinel # this means it doesn't have a meaningful value

# later
if some_variable is _sentinel:
some_variable = some_expensive_computation()

关于python - Python 中 devar 的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com