Python:当相同的代码放在不同的脚本中并使用execfile执行时,性能会有所不同
我有一个脚本Python:当相同的代码放在不同的脚本中并使用execfile执行时,性能会有所不同,python,neural-network,built-in,biological-neural-network,neuroscience,Python,Neural Network,Built In,Biological Neural Network,Neuroscience,我有一个脚本network.py,其中包括以下内容: from brian import * . . . simulation_clock = Clock(dt=dt) . . . pop_vector = NeuronGroup(1, model=eqs_pop_vector) 此脚本引发一个TypeError,因为simulation\u clock没有作为参数传递给NeuronGroup 但是,如果我按如下方式拆分代码 $ cat simclock.py simulation_clock
network.py
,其中包括以下内容:
from brian import *
. . .
simulation_clock = Clock(dt=dt)
. . .
pop_vector = NeuronGroup(1, model=eqs_pop_vector)
此脚本引发一个TypeError
,因为simulation\u clock
没有作为参数传递给NeuronGroup
但是,如果我按如下方式拆分代码
$ cat simclock.py
simulation_clock = Clock(dt=dt)
$ cat network.py
from brian import *
. . .
execfile('simclock.py')
. . .
pop_vector = NeuronGroup(1, model=eqs_pop_vector)
它运行时没有任何故障,即没有TypeError
我的问题的答案可能部分与神经元组的细节有关,但也比这更一般:一般来说,为什么会有相同的确切代码——在这种情况下,模拟时钟=时钟(dt=dt)
--当与代码的其余部分分离并使用execfile
调用时,与在与代码的其余部分相同的脚本中调用时,会产生不同的效果吗
关于组的详细信息
,当没有Clock
作为参数提供时,调用以下函数(使用默认关键字参数),以查找Clock
的定义实例:
def find_instances(instancetype, startlevel=1, all=False):
"""Find first instances of a given class in the stack
See documentation for module Brian.magic
"""
# Note that we start from startlevel+1 because startlevel means from the calling function's point of view
for level in range(startlevel + 1, len(getouterframes(currentframe()))):
objs, names = get_instances(instancetype, level, all=all)
if len(objs):
return (objs, names)
return ([], [])
由于某些原因,此函数无法在使用execfile
调用的单独文件中找到定义的Clock
实例。所以我想这是brian中的一个bug,它提出了一个一般性的问题。(如果社区觉得这个问题太具体,我会删除它。)是否有可能存在多个时钟类。当您使用*
而不是显式地导入所有内容时,有时会覆盖其他类。我会尝试只从brian
模块和您正在使用的任何其他模块导入您需要的东西。完全同意。我从不进口任何东西;这是别人给我的代码。只有一个时钟
类,所以这不能解释这一点。问题似乎与NeuronGroup
查找时钟实例的能力有关。有一个函数find_instances
,用于NeuronGroup
的\uuuu init\uuu
调用,用于在堆栈中搜索实例。一旦我弄清楚了这个问题,我会发布一个答案(如果其他人没有打败我的话)。