我正在用python制作一个图创建程序,需要将方程作为函数中的参数传递(根据需要创建图(,在该等式中,我需要一些变量在函数运行时发生变化。
感谢您帮助它的马奇赞赏。
我试图找到解决方案,但我不是那么好,所以我不明白,如果可以的话,有什么解释。
#inside a class and this is also simplified.
def function(self, e):
x = 0
for i in range(100):
print(e)
x += 1
classObj.function(x * 2)
我希望您能够在 e 参数中添加 x 变量,这样我就可以使其更灵活,但该变量是为循环创建的函数。
参数表达式在调用函数之前计算
。如果要传递动态内容,请使用回调函数。如果函数很简单,它可以写成 lambda。
def function(self, f):
for i in range(100):
print(f(i))
classObj.function(lambda x: x * 2)
我不确定我是否正确理解了你的问题,但在 Python 中你可以将函数作为参数传递。为了描述它,我们说函数是一等公民,或者一种语言支持高阶函数。
以下是如何实现它的示例:
class YourClass:
def function(self, e):
x = 0
for i in range(100):
result = e(x) # you can call a function passed as a parameter
print(result) # do something with a result
x += 1
def multiply_by_2(x):
return x * 2
def add_2(x):
return x + 2
obj = YourClass()
obj.function(multiply_by_2) # just use function name without parenthesis
obj.function(add_2) # you can also pass different function!
由于您尚未定义x
,因此在调用classObj.function()
时会抛出错误。您可以将公式作为字符串传入,并对其调用exec()
或eval()
。
例如:
def function(self, e):
x = 0
for i in range(100):
print(exec(e))
print(eval(e))# does same thing as above line
x += 1
classObj.function("x * 2")
eval()
和exec()
之间的区别在于,eval()
只评估一个表达式,但exec()
可以运行大块代码。我建议只使用必要的,所以exec()
是矫枉过正的。
也许看到这篇关于将表达式传递给函数的文章,但我不确定这是否是你想要的。