如何在Python中将函数存储在数组中?

问题描述 投票:0回答:1

我试图将函数存储在数组中并将该数组存储在字典中,以便稍后可以通过字典调用该数组中的值。

我创建了一个零数组并创建了一个循环,随着循环的进行,该循环将函数存储在数组中。 Zeros 数组中的每个单元格都应包含该函数,但根据循环具有不同的参数。

我试过这个:

注意,在代码中,该函数是来自名为 SubKit 的 python 包的“HeatedSolid”,我将其导入为“sk”

另请注意,该函数不会生成整数或浮点数或任何数字,它只是一个生成参数的函数,我将使用不同的代码处理该参数。

示例: 如果您将参数传递给函数,

sk.HeatedSolid(我在这里随机放置参数)返回以下参数:

matrix = some array

X_position = some array
Y_position = some array

matrix_dict = {
    10: {"multi": "69"},
    20: {"multi": "59"}, 
    30: {"multi": "49"}
}
array = np.zeros((10, 10))

for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        if matrix[i,j] == "10":
            if matrix[i,j] in matrix_dict.keys():
                matrix_params = matrix_dict[matrix[i,j]]
                array[i][j]= sk.HeatedSolid(x=X_position[i][j],
                                            y=Y_position[i][j],
                                            symtype= 1,
                                            mult=rod_params("multi"),
                                            power=1)
print(array)

当我打印数组时,它只是一个零数组,并且函数不存储在数组中

arrays numpy function python-2.7
1个回答
0
投票

如果你想将函数本身(可调用的东西)存储在数组中,你应该使用python的内置数组而不是numpy的ndarray(后者只能存储原始int或float或string值)。
在您的情况下,您想要存储函数及其参数,因此您可以执行类似的操作:


matrix_dict = {
    10: {"multi": "69"},
    20: {"multi": "59"}, 
    30: {"multi": "49"}
}

array = []  # note here
for i in range(len(matrix)):
    array_row = []  # note here
    for j in range(len(matrix[i])):
        if matrix[i,j] == "10":
            if matrix[i,j] in matrix_dict.keys():
                matrix_params = matrix_dict[matrix[i,j]]
                array_row.append((HeatedSolid, {"x":X_position[i][j],
                                                "y":Y_position[i][j],
                                                "symtype": 1,
                                                "mult":rod_params("multi"),
                                                "power":1}))  # note here, append a tuple of function and its args
    array.append(array_row)  # note here

# when you want to call it later
for arr in array:
    for (func, kwargs) in arr:
        func(**kwargs)
© www.soinside.com 2019 - 2024. All rights reserved.