我有一个名为的两个numpy数组,dec_pair并dec_community在一个名为config.pyinitial 的模块中初始化为零:
dec_pair = numpy.zeros(200)
dec_community = numpy.zeros(200)
Run Code Online (Sandbox Code Playgroud)
现在,我试图从其他模块访问它们,比如说roc.py,它们的名称是根据输入变量形成的,即
import config
def dosomething(name):
local_name = 'config.py'+name
eval(local_name)[i:] += 1
Run Code Online (Sandbox Code Playgroud)
哪里name可以pair或community.问题是,eval(local_name)返回numpy数组的长度,即200这里而不是数组本身,这给了我这个错误:
ValueError:无法切片0-d数组
但是,当我在python解释器上做同样的事情时,它运行顺利:
>>> dec_pair = numpy.zeros(5)
>>> name = 'pair'
>>> local_name = 'dec_'+name
>>> eval(local_name)
array([ 0., 0., 0., 0., 0.])
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么,以及做正确的方法是什么?
呸.
首先,不要使用eval().你会度过一段美好的时光.
其次,只需导入配置!在roc.py:
def dosomething(numpy_array):
return somefunction(numpy_array)
Run Code Online (Sandbox Code Playgroud)
在其他一些模块中:
import roc
import config
someresult = roc.somefunction(config.dec_pair)
Run Code Online (Sandbox Code Playgroud)
编辑:重新阅读您的问题后,我相信您正在尝试使用全球价值观.这几乎总是表明设计不佳.您应该将"全局"变量的使用限制为单个脚本,并使用函数来传递这些对象.