用变量Python替换代码

2024-10-03 00:19:22 发布

您现在位置: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不接受字符串。还尝试删除VAR中的“”,使其成为一个数字,但这不会进一步给出所需的结果,因为xy会不断变化。唯一有效的方法就是写4遍math.sin(x*y)math.sin(xy),但是很乏味,我也很懒

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


Tags: 字符串程序newvarmathv3sinprecision
1条回答
网友
1楼 · 发布于 2024-10-03 00:19:22

与其尝试动态执行代码,不如将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)))

相关问题 更多 >