用变量Python替换代码

时间:2017-08-14 18:54:58

标签: python

我有一个程序,其中部分代码必须不断修改:

VAR = 'math.sin(x*y)*math.sin(x*y)'

while (x <=  vfinal) and (y <= vfinal):
    v1 = bm.verts.new((round(x,3),round(y,3),VAR))
    x = x + precision
    v2 = bm.verts.new((round(x,3),round(y,3),VAR))
    y = y + precision
    x = x - precision
    v3 = bm.verts.new((round(x,3),round(y,3),VAR))
    x = x + precision
    v4 = bm.verts.new((round(x,3),round(y,3),VAR))
    bm.faces.new((v1,v2,v4,v3))
    y = y - precision
    if (round(x,1) == vfinal):
        y = y + precision
        x = vinicial

由于math.sin(x*y)*math.sin(x*y)出现4次(可能在我扩展程序后可能更多),我想通过更改VAR中存储的内容来轻松更改程序。

到目前为止,我尝试将VAR设为字符串,这会产生错误,因为bm.verts.new不接受字符串。还尝试删除&#39; &#39;在VAR中,为了使它成为一个数字,但由于xy不断变化,因此不会进一步降低所需的结果。唯一有效的是写了math.sin(x * y) math.sin(x y)4次,但是它很乏味而又懒惰。

有什么办法可以做我想要的吗?如果没有,我该怎么办?

1 个答案:

答案 0 :(得分:4)

您可以使VAR成为一个函数,而不是尝试动态执行代码:

VAR = lambda x, y: math.sin(x * y) * math.sin(x * y)

或者如果您更喜欢香草功能:

def VAR(x, y):
    return math.sin(x * y) * math.sin(x * y)

然后,您可以通过调用该函数来重用逻辑。例如:

v1 = bm.verts.new((round(x,3),round(y,3),VAR(x, y)))