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)