Python Scipy访问另一个函数中的局部变量?

时间:2016-10-28 06:38:15

标签: python scipy

在Scipy中,通过args参数在函数定义中指定常量参数,可以实现具有多个参数的函数的一维集成。

此示例来自Scipy参考指南:

>>> from scipy.integrate import quad
>>> def integrand(x, a, b):
...     return a * x + b
>>> a = 2
>>> b = 1
>>> I = quad(integrand, 0, 1, args=(a,b))
>>> I = (2.0, 2.220446049250313e-14)

https://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html

我一直认为函数中定义的局部变量在定义之外是不可访问的。在这里,这似乎不正确,因为四元组仅需要integrad作为函数参数,并且它自动知道所使用的变量是(x, a, b)(因此(a, b)被视为集成中的参数)

这里发生了什么?我错过了什么?

1 个答案:

答案 0 :(得分:0)

quadintegrand使用的变量一无所知。它不知道参数被称为ab。它只能看到全局变量ab,它会将这些值位置传递给被积函数。换句话说,如果您执行了

,代码将起作用
x = 2
y = 1
I = quad(integrand, 0, 1, args=(x,y))

quad甚至不知道integrand接受了多少个参数,除了它至少接受一个参数。 quad将积分变量的值作为第一个参数传递。您,用户,必须知道并传递正确的号码。如果您没有(例如,如果您没有通过args,或者只是通过了一个arg),那么您将收到错误消息。 quad只是盲目地传递你给出的任何论据。