【问题标题】:Send parameters to a user-defined function?将参数发送到用户定义的函数?
【发布时间】:2016-07-22 13:59:35
【问题描述】:

我们定义一个用户自定义函数如下。

def testfun(x):
    return( x[0]*a+x[1]*b)

调用函数:

sol =  optimize.root(testfun, [0, 0], method = 'lm')

我们如何在调用函数时传递ab

【问题讨论】:

    标签: python python-3.x scipy


    【解决方案1】:

    对于这个问题,optimize.root 有一个 args 输入,它接受一组值作为附加输入传递给您的目标函数:

    def testfun(x, a, b):
        return ([x[0] * a + x[1] * b])
    
    # Specify values for a and b
    a = 1
    b = 2
    
    sol = optimize.root(testfun, [0, 0], method='lm', args=(a, b))
    

    更一般地说,您可以使用 lambda 函数为任何函数提供额外的输入

    # Create a lambda function which passes the input provided by optimize.root and adds 
    # two more inputs: a and b
    func = lambda x: testfun(x, a, b)
    
    # Pass this lambda function to optimize.root
    sol = optimize.root(func, [0, 0], method='lm')
    

    【讨论】:

    • 好的。明白了。但是,即使我不在函数定义中分别发送值 a、b,它们也能够获取值吗?是不是因为它们默认是全局变量?
    • @learner123 您可以使用全局变量,但最好明确地传递它们。
    • 好的。我养成了明确传递它们的习惯。
    • @learner123 使用args 输入到optimize.root 查看更新
    • 感谢您的回答。所以,a= 2, b =3 optimize.root(testfun, [0, 0], method='lm', args=(a, b)) a = 4, b = 5 optimize.root(testfun, [0, 0], method='lm', args=(a, b)) 是在optimize.root函数中使用args吗?只是好奇,root 函数中的args 选项需要什么。默认情况下,它们已经是全局的。
    猜你喜欢
    • 1970-01-01
    • 2010-10-06
    • 2012-11-19
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多