wom*_*ble 27 python refresh reload
这是一个非常基本的问题 - 但我无法通过在线搜索找到答案.
我使用python来控制ArcGIS,我有一个简单的python脚本,它调用一些预先编写的代码.
但是,当我对预先编写的代码进行更改时,它似乎不会导致任何更改.我导入了这个模块,并尝试刷新它,但没有任何反应.
我甚至将它调用的文件移动到另一个位置,脚本仍然可以正常工作.我昨天做的一件事是我添加了所有我的python文件到sys路径的文件夹(使用sys.append('path')),我想知道这是否有所作为.
在此先感谢,并抱歉草率的术语.
Len*_*bro 32
目前还不清楚你对"刷新"的意思,但Python的正常行为是你需要重新启动软件才能在Python模块上焕然一新并重新阅读它.
如果您的更改即使在重新启动后仍未处理,则这是由于以下两个错误之一:
即使不使用reload()命令重新启动软件,也可以通过重新加载重新读取文件.请注意,指向模块中任何内容的任何变量都需要在重新加载后重新导入.像这样的东西:
import themodule
from themodule import AClass
reload(themodule)
from themodule import AClass
Run Code Online (Sandbox Code Playgroud)
Mar*_*off 19
一种方法是打电话reload.
示例:以下是以下内容foo.py:
def bar():
return 1
Run Code Online (Sandbox Code Playgroud)
在交互式会话中,我可以这样做:
>>> import foo
>>> foo.bar()
1
Run Code Online (Sandbox Code Playgroud)
然后在另一个窗口中,我可以foo.py改为:
def bar():
return "Hello"
Run Code Online (Sandbox Code Playgroud)
回到交互式会话中,调用foo.bar()仍然返回1,直到我执行:
>>> reload(foo)
<module 'foo' from 'foo.py'>
>>> foo.bar()
'Hello'
Run Code Online (Sandbox Code Playgroud)
调用reload是确保模块即使磁盘上的文件发生更改也是最新的一种方法.这并不一定是最有效的(你可能会更好检查该文件的最后修改时间或使用类似pyinotify中你之前reload),但它肯定是快速实施.
Python每次都不从源模块读取的一个原因是加载模块是(相对)昂贵的 - 如果你有一个300kb模块并且你只是使用文件中的一个常量怎么办?Python加载一次模块并将其保存在内存中,直到你reload.