簡體   English   中英

如何將參數傳遞給Python vegas庫中調用的函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM