有没有办法在模块内部设置全局变量?当我尝试以最明显的方式执行此操作时,如下所示,Python解释器说该变量__DBNAME__不存在.
...
__DBNAME__ = None
def initDB(name):
if not __DBNAME__:
__DBNAME__ = name
else:
raise RuntimeError("Database name has already been set.")
...
Run Code Online (Sandbox Code Playgroud)
并在将模块导入另一个文件后
...
import mymodule
mymodule.initDB('mydb.sqlite')
...
Run Code Online (Sandbox Code Playgroud)
追溯是: __DBNAME__
有任何想法吗?我正在尝试使用模块来设置单例,根据这个人的建议.
据我所知,python模块永远不会导入两次,即模块中的代码仅在第一次导入时执行.后续导入语句只是将模块添加到导入范围.
我有一个名为"TiledConvC3D.py"的模块,但似乎已多次导入.我使用pdb打印此模块代码顶部的堆栈.
这是从第一次执行模块开始的堆栈跟踪结束:
File "<anonymized>/python_modules/Theano/theano/gof/cmodule.py", line 328, in refresh
key = cPickle.load(open(key_pkl, 'rb'))
File "<anonymized>/ops/TiledConvG3D.py", line 565, in <module>
import TiledConvC3D
File "<anonymized>/ops/TiledConvC3D.py", line 18, in <module>
pdb.traceback.print_stack()
Run Code Online (Sandbox Code Playgroud)
它继续执行几次.但是,第二次调用它的完整堆栈跟踪没有显示任何调用reload,因此不应发生这些执行:
File "sup_train_conj_grad.py", line 103, in <module>
dataset = Config.get_dataset(dataset_node)
File "<anonymized>/Config.py", line 279, in get_dataset
from datasets import NewWiskott
File "<anonymized>/datasets/NewWiskott.py", line 16, in <module>
normalizer_train = video.ContrastNormalizer3D(sigma, global_per_frame = False, input_is_5d = True)
File "<anonymized>/util/video.py", line 204, in __init__
self.f = theano.function([input],output)
File "<anonymized>/python_modules/Theano/theano/compile/function.py", line 105, in function …Run Code Online (Sandbox Code Playgroud) 对不起,如果这是一个非常新手的问题,我只是想知道一件事.
在python中,你的代码被分成多个文件,你怎么能避免在同一个东西上进行大量的导入?
说我有2个文件.主要和内容.
主要:
import pygame
from pygame.locals import *
pygame.display.init()
blah
Run Code Online (Sandbox Code Playgroud)
内容:
import pygame
from pygame.locals import *
pygame.display.init()
load content and stuff
Run Code Online (Sandbox Code Playgroud)
pygame导入两次,display.init并被调用两次.这在其他地方是有问题的.反正有没有解决这个问题,还是只需要导入导入导入?
我能想到的一种情况是:每次导入时都会写入文件的脚本.这样,如果它被导入3次,它会运行3次,因此写入文件3次.
提前致谢!