scipy.integrate.romberg -- 如何传递带有关键字参数的函数
scipy.integrate.romberg -- how to pass functions with keyword arguments
希望这是一个快速、简单的问题,但它让我有点困惑...
我有一个函数,它带有两个强制参数和几个我想使用 scipy.integrate.romberg
集成的关键字参数。我知道我可以使用 args
关键字将额外的参数传递给 scipy.integrate.romberg
,在这里我可以将额外的参数指定为元组,但是,在元组中,我如何指定哪个函数参数是关键字参数以及哪个关键字参数是什么?
例如
import numpy as np
from scipy import integrate
def myfunc(x,y,a=1,b=2):
if y > 1.0:
c = (1.0+b)**a
else:
c = (1.0+a)**b
return c*x
y = 2.5
a = 4.0
b = 5.0
integral = integrate.romberg(myfunc,1,10,...?) # What do I specify here so
# that romberg knows that
# y = 2.5, a = 4.0, b = 5.0?
起初我尝试在class中定义函数,这样所有关键字参数都设置在__init__
中,但scipy.integrate.romberg
似乎不喜欢我传递以 self
作为第一个参数的函数。 (恐怕现在手上没有错误消息)!
有什么想法吗?
谢谢!
对原始 post 的评论建议将关键字参数作为位置参数传递。这会起作用,但是如果有很多关键字参数并且您不想显式地传递它们,那将会很麻烦。一种更通用(也许更 Pythonic)的方法是使用这样的闭包来包装你的函数:
def myfunc(x,y,a=1,b=2):
if y > 1.0:
c = (1.0+b)**a
else:
c = (1.0+a)**b
return c*x
def mywrapper(*args, **kwargs):
def func(x):
return myfunc(x, *args, **kwargs)
return func
myfunc_with_args = mywrapper(2.5, a=4.0, b=5.0)
integral = integrate.romberg(myfunc_with_args, 1, 10)
希望这是一个快速、简单的问题,但它让我有点困惑...
我有一个函数,它带有两个强制参数和几个我想使用 scipy.integrate.romberg
集成的关键字参数。我知道我可以使用 args
关键字将额外的参数传递给 scipy.integrate.romberg
,在这里我可以将额外的参数指定为元组,但是,在元组中,我如何指定哪个函数参数是关键字参数以及哪个关键字参数是什么?
例如
import numpy as np
from scipy import integrate
def myfunc(x,y,a=1,b=2):
if y > 1.0:
c = (1.0+b)**a
else:
c = (1.0+a)**b
return c*x
y = 2.5
a = 4.0
b = 5.0
integral = integrate.romberg(myfunc,1,10,...?) # What do I specify here so
# that romberg knows that
# y = 2.5, a = 4.0, b = 5.0?
起初我尝试在class中定义函数,这样所有关键字参数都设置在__init__
中,但scipy.integrate.romberg
似乎不喜欢我传递以 self
作为第一个参数的函数。 (恐怕现在手上没有错误消息)!
有什么想法吗?
谢谢!
对原始 post 的评论建议将关键字参数作为位置参数传递。这会起作用,但是如果有很多关键字参数并且您不想显式地传递它们,那将会很麻烦。一种更通用(也许更 Pythonic)的方法是使用这样的闭包来包装你的函数:
def myfunc(x,y,a=1,b=2):
if y > 1.0:
c = (1.0+b)**a
else:
c = (1.0+a)**b
return c*x
def mywrapper(*args, **kwargs):
def func(x):
return myfunc(x, *args, **kwargs)
return func
myfunc_with_args = mywrapper(2.5, a=4.0, b=5.0)
integral = integrate.romberg(myfunc_with_args, 1, 10)