2010-11-08 55 views
4

有什么可以指望在导入后立即重新加载这些模块?这就是我正在审查这让我不知道该代码:是否有任何可能指向立即重新加载Python模块?

import time 
import sys 
import os 
import string 
import pp 
import numpy 
import nrrd 
reload(nrrd) 
import smooth as sm 
reload(sm) 
import TensorEval2C as tensPP 
reload(tensPP) 
import TrackFiber4C as trackPP 
reload(trackPP) 
import cmpV 
reload(cmpV) 
import vectors as vects 
reload(vects) 

编辑:我认为,这可能使pyc文件更容易的创建,但一些人指出,出现这种情况这第一次,每时间。

+4

不,当第一次导入模块时,已经创建了'.pyc'文件。请打这个写这个的人,或者写一些无所事事的代码,或者不要用很多评论来解释他的奇怪黑客行为。另外,这些是一些可怕的模块名称。 – delnan 2010-11-08 20:24:17

+0

我继承了这个程序员代码的一小部分,他们当时对python来说很新,所以我通常假设他们不知道当我看到疯狂或非Pythonic的东西时Python是如何工作的 - 但是我试图小心假设我总是知道更好。变量名通常超短,多余的换行符和不必要的'对于范围内的我(len(list)):'循环比比皆是。 – Thomas 2010-11-09 00:27:54

回答

6

我注意到,标准模块只是导入:它是其他模块重新加载。我希望编写此代码的人希望能够轻松地重新加载整个软件包(以便获得最新的编辑)。把所有这些冗余reload电话后,程序员只需编写

>>> reload(package) 

要带的东西最新的解释,而不必键入

>>> reload(package.nrrd) 
>>> reload(package.sm) 
>>> reload(package.tensPP) 

等,所以请无视建议你对写这个的程序员犯下暴力:他们是far from the only programmer谁在重新加载依赖关系时遇到问题。只要鼓励他们将重新加载到一个便利功能。

+0

我正在运行一个嵌入式版本的Python(用于调试目的)重新加载主模块,并且主模块重新加载所有其他模块,以确保它们都使用最新版本的代码。这意味着我可以调试代码而不必停止并重新启动整个应用程序。 – 2010-11-08 21:06:36

+0

请参阅我给出的一个框架,它可以在更改时自动重新加载依赖关系。 – 2010-11-09 11:23:09

+0

似乎最可能的原因。 – Thomas 2010-11-18 04:26:40

1

.pyc文件将在第一次导入时创建,所以即使这不是一个很好的理由。

+0

我怀疑这有什么好的理由。我当然希望它有一些远程有效的理由。 – delnan 2010-11-08 20:25:03

+0

谢谢,更新了这个问题,以避免永久保留这个神话。 – Thomas 2010-11-09 00:34:47

6

这可能会导致某些事情发生;显而易见的例子是导入时发生的副作用。例如,一个模块可以记录每次导入时的日期和时间。

但是,这可能没有什么好的理由。

0

这段代码的执行环境是什么?至少存在一个Python web框架,它可以做出与标准python不同的重新加载决定,当你进行一次“不需要”的更改时,会导致沮丧和困惑。