将一组math.functions作为参数传递给多个变量

时间:2016-03-29 17:50:16

标签: python

基本上我想要的是一个采用两个数组的方法

array1=[1, 2, 3]
array2=[math.pow(x, 3), math.pow(x, 2)+x, 3*x]

在方法内部使用array1的第一个元素作为array1的第一个函数中的x,array2的第二个元素作为array2的第二个函数中的x,依此类推。

def cal(array1, array2):

我查看了stackoverflow,我得到的关闭是使用lambda或使用函数调用方法,但没有一个解决了我的问题。

2 个答案:

答案 0 :(得分:3)

您正在寻找python lambda functions

>>> import math
>>> array1 = [1, 2, 3]
>>> array2 = [lambda x: math.pow(x, 3), lambda x: math.pow(x, 2)+x, lambda x: 3*x]
>>> for function in array2:
...     print map(function, array1)
... 
[1.0, 8.0, 27.0]
[2.0, 6.0, 12.0]
[3, 6, 9]

基本上,每个函数都作为一个可调用的lambda存储在一个数组中,然后,使用内置的map为array1的所有值调用每个函数。

作为列表理解,返回列表列表:

>>> [map(function, array1) for function in array2]
[[1.0, 8.0, 27.0], [2.0, 6.0, 12.0], [3, 6, 9]]

如果要根据相同的索引将函数应用于每个项目,可以使用:

>>> [y(x) for (x, y) in zip(array1, array2)]
[1.0, 6.0, 9]

答案 1 :(得分:1)

这确实是你想要的:

import math

array1 = [1, 2, 3]
array2 = ['math.pow(x, 3)', 'math.pow(x, 2)+x', '3*x']

def cal(values, expressions):
    return [eval(expression, {'math': math, '__builtins__': None}, {'x': value})
                for value, expression in zip(values, expressions)]

print(cal(array1, array2))

输出:

[1.0, 6.0, 9]