我有一个程序,其中部分代码必须不断修改:
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中,为了使它成为一个数字,但由于x
和y
不断变化,因此不会进一步降低所需的结果。唯一有效的是写了math.sin(x * y) math.sin(x y)4次,但是它很乏味而又懒惰。
有什么办法可以做我想要的吗?如果没有,我该怎么办?
答案 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)))