Python:在将字符串转换为numpy数组的名称时使用eval()时出错

R.B*_*ahl 0 python numpy eval

我有一个名为的两个numpy数组,dec_pairdec_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可以paircommunity.问题是,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)

知道我做错了什么,以及做正确的方法是什么?

Col*_*lau 5

呸.

首先,不要使用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)

编辑:重新阅读您的问题后,我相信您正在尝试使用全球价值观.这几乎总是表明设计不佳.您应该将"全局"变量的使用限制为单个脚本,并使用函数来传递这些对象.