[英]How can I pass parameter to a function called in Python vegas library?
我正在嘗試將某些函數與vegas庫進行集成,該函數是集成f(x) = lambda x: x ** 2.0
的簡單工具f(x) = lambda x: x ** 2.0
是
import vegas
f = lambda x: x ** 2.0
integrator = vegas.Integrator([[0.0, 1.0]])
result = integrator(f, nitn = 10, neval = 10000)
print result
它將打印[0.33333389(69)]
並且是正確的。 但是,如果我希望能夠更改函數f
的冪值,但添加如下所示的輸入參數
def f(x, p):
return x ** p
方法Integrator
將抱怨以下內容
SyntaxError: invalid syntax
使用global
變量傳遞p
會弄亂代碼,因為在實踐中,我有很多參數要傳遞給f
。 使用以下替代定義將涉及更改函數的實際定義,而不是首選解決方案
def f(x, p = 2.0):
return x ** p
那么我該怎么做才能將參數傳遞給在方法Integrator
調用的f
? 提前致謝!
一種解決方案是擁有可以構建冪函數的函數:
def to_the_power(p):
return lambda x: x ** p
result = integrator(to_the_power(2), nitn = 10, neval = 10000)
該技術通常稱為currying ,這里我們對冪函數進行咖喱化處理 ,這樣我們就可以一次傳遞一個參數,而不是一次傳遞所有參數。 請注意,如果您需要使用多個參數來執行此操作,或者使用了無法控制的功能,則functools.partial
可能會有用:
import functools
def f(p, x):
return x ** p
integrator(functools.partial(f, 2), nitn = 10, neval = 10000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.