use*_*514 73 python overloading runtime ipython python-import
我有一个 foo.py
def foo():
print "test"
Run Code Online (Sandbox Code Playgroud)
在IPython中我使用:
In [6]: import foo
In [7]: foo.foo()
test
Run Code Online (Sandbox Code Playgroud)
然后我改为foo():
def foo():
print "test changed"
Run Code Online (Sandbox Code Playgroud)
在IPython中,调用的结果仍然是test:
In [10]: import foo
In [11]: foo.foo()
test
Run Code Online (Sandbox Code Playgroud)
然后我用:
In [15]: del foo
In [16]: import foo
In [17]: foo.foo()
test
Run Code Online (Sandbox Code Playgroud)
我删除了foo.pyc相同的文件夹foo.py存在,但仍然没有运气.
我可以知道如何在运行时重新导入更新的代码吗?
Joh*_*ooy 97
对于Python 2.x
reload(foo)
Run Code Online (Sandbox Code Playgroud)
对于Python 3.x
import importlib
import foo #import the module here, so that it can be reloaded.
importlib.reload(foo)
Run Code Online (Sandbox Code Playgroud)
dan*_*lei 62
除了gnibbler的回答:
这在Python 3中改为:
>>> import imp
>>> imp.reload(foo)
Run Code Online (Sandbox Code Playgroud)
正如@onnodb所指出的那样,自Python 3.4以来imp不赞成使用importlib:
>>> import importlib
>>> importlib.reload(foo)
Run Code Online (Sandbox Code Playgroud)
小智 42
IPython3的自动重载功能效果恰到好处.
我正在使用网页上的实际示例.首先加载'autoreload'功能.
In []: %load_ext autoreload
In []: %autoreload 2
Run Code Online (Sandbox Code Playgroud)
然后导入要测试的模块:
In []: import foo
In []: foo.some_function()
Out[]: 42
Run Code Online (Sandbox Code Playgroud)
在编辑器中打开foo.py并更改some_function以返回43
In []: foo.some_function()
Out[]: 43
Run Code Online (Sandbox Code Playgroud)
如果直接导入函数,它也可以工作.
In []: from foo import some_function
In []: some_function()
Out[]: 42
Run Code Online (Sandbox Code Playgroud)
在some_function中进行更改以返回43.
In []: some_function()
Out[]: 43
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48791 次 |
| 最近记录: |