【问题标题】:In the Python REPL, how to get latest code from all file? [duplicate]在 Python REPL 中,如何从所有文件中获取最新代码? [复制]
【发布时间】:2016-01-31 01:45:51
【问题描述】:

我在两个文件中有以下玩具代码:

文件b.py

def test_b():
    print "b"

文件a.py: 从 b 导入 test_b

def test_a():
    print "a"
    test_b()

然后我运行 python REPL:

>>> execfile("a.py")
>>> test_a()
a
b

然后我将b.py修改为: def test_b(): 打印“bb”

并在 REPL 中运行:

>>> execfile("b.py")
>>> test_a()
a
bb

现在一切都很好。现在我将a.py修改为:

from b import test_b

def test_a():
    print "aa"
    test_b()

现在我遇到了 REPL:

>>> execfile("a.py")
>>> test_a()
aa
b

自从 REPL 获得了旧版本的 b.py 后,这已经不再适用了。 Python 在加载文件时似乎正在做一些缓存,我的问题是:有没有办法强制它不这样做?我找不到函数excefile 的合适选项。

【问题讨论】:

标签: python read-eval-print-loop


【解决方案1】:

根据: https://docs.python.org/2/tutorial/modules.html 您可以使用 reload(a) (它必须之前已经导入过一次)。请参阅说明,这可能不是最佳解决方案。

引文:

注意

出于效率原因,每个模块在每个解释器会话中只导入一次。因此,如果你改变你的模块,你必须重新启动解释器——或者,如果它只是你想要交互测试的一个模块,使用 reload(),例如重新加载(模块名称)。

及功能说明:https://docs.python.org/2/library/functions.html#reload 适度使用,因为:

如果一个模块使用 from ... import ... 从另一个模块导入对象,则为另一个模块调用 reload() 不会重新定义从它导入的对象 — 解决此问题的一种方法是重新执行 from 语句, 另一种是使用导入和限定名称 (module.name)。

最简单的解决方案是重新启动您的解释器。

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多