【发布时间】:2019-05-03 01:44:24
【问题描述】:
我正在为 python 中的微积分包编写一些代码。理想情况下,我想支持用户定义函数的组合。例如,用户可以在我的 SingleVariable 类中定义函数,如下所示:
f = SingleVariable('sin(x)')
g = SingleVariable('x+4')
然后是合成
h = SingleVariable('f(g(x))')
这些函数可以进行积分、微分等,在某一点上对函数求值的方法如下:
def infix_to_function(infix, variable):
def f(x):
expression = infix.replace(variable, str(x)).replace('^', '**')
return eval(expression)
return f
这适用于sin 和ln 等函数,因为它们可以提前加载以便被eval 识别。但是,这显然不适用于用户定义的函数,因为它们不存在于实际计算函数的命名空间中。回到示例函数f 和g,我想要一个定义为
h = SingleVariable('f(g(x))')
等价于
h = SingleVariable('sin(x+4)')
我正在 PyCharm 中编写包并通过导入 Jupyter Notebook 来测试它。我考虑在初始化新的SingleVariable 对象时将该函数添加到某种列表中,但这需要以某种方式获取分配给它的变量的名称。
有什么方法可以将我在 Jupyter Notebook 中定义的函数添加到 PyCharm 包的命名空间中,以便它们可以被eval 识别并具有描述的行为?
【问题讨论】:
-
您考虑过
globals()和locals()变量吗?他们可能会在这里为您提供帮助。
标签: python namespaces pycharm jupyter-notebook