【发布时间】:2022-01-11 05:37:08
【问题描述】:
我定义了以下函数
def f(x):
return x*a
def g(x,a):
return f(x)
g(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in g
File "<stdin>", line 2, in f
NameError: name 'a' is not defined
现在,如果我尝试为 x 和 a 的任何值评估 g(x,a),则表明未定义 a。我怀疑这是因为a 应该是一个全局变量。
我听说使用全局变量是不好的做法,所以我的问题是如何让g(x,a) 给出一个以a 作为参数的结果?
注意:我没有将 a 作为参数提供给 f(x) 的原因是因为它需要作为一个微分方程(使用 scipy)来求解,只需要相关变量作为参数。
【问题讨论】:
-
如果
f使用a,那么a肯定与定义f相关。你要解的数学方程是什么? -
实际涉及的函数要复杂得多,但要点是
g是卡方,a是参数之一。f是一个依赖于参数a的函数。微分方程类似于以a为参数的dx/dt=f(x)。 Scipy 仅在函数具有微分方程中存在的参数时才求解。因此f不能接受a作为参数。 -
a是一个会变化的参数,每个a都会求解微分方程 -
“我没有将 a 作为参数提供给 f(x) 的原因是因为它需要作为一个微分方程(使用 scipy)来求解,只有相关变量作为参数。” - 这就是为什么 SciPy 求解器有一个
args参数来为您传递给求解器的函数指定其他参数。 -
对于没有这个参数的,你可以使用
functools.partial,或者闭包(但是如果你使用闭包要注意后期绑定)。