在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)
被视为集成中的参数)
这里发生了什么?我错过了什么?
答案 0 :(得分:0)
quad
对integrand
使用的变量一无所知。它不知道参数被称为a
和b
。它只能看到全局变量a
和b
的值,它会将这些值位置传递给被积函数。换句话说,如果您执行了
x = 2
y = 1
I = quad(integrand, 0, 1, args=(x,y))
quad
甚至不知道integrand
接受了多少个参数,除了它至少接受一个参数。 quad
将积分变量的值作为第一个参数传递。您,用户,必须知道并传递正确的号码。如果您没有(例如,如果您没有通过args
,或者只是通过了一个arg),那么您将收到错误消息。 quad
只是盲目地传递你给出的任何论据。