我试图将一个非可变整数参数从一个函数传递给其他定义的函数;我的错误是啥?

Posted

技术标签:

【中文标题】我试图将一个非可变整数参数从一个函数传递给其他定义的函数;我的错误是啥?【英文标题】:I am trying to pass a non-mutable integer argument from one function to other defined functions; what is my mistake?我试图将一个非可变整数参数从一个函数传递给其他定义的函数;我的错误是什么? 【发布时间】:2017-08-11 10:28:49 【问题描述】:

假设我有一个函数调用链。

def func1( pick, arg1, arg2 ):
    if pick == 1:
        do stuff with arg1 and arg2
    elif pick == 2:
        do other stuff with arg1 and arg2 
    return stuff that got done

def func2( pick, arg1, arg2, arg3 ):
    if pick == 1:
        do stuff with arg1 and arg2 and arg3 
    elif pick == 2:
        do other stuff with arg1 and arg2 and arg3
    return stuff that got done

def func3( pick, func2, arg3 ):
    if pick == 1:
        do stuff with funcs and arg3
    elif pick == 2:
        do other stuff with funcs and arg3
    return stuff that done
etc ..

我能够通过 SCIPY quad(数值积分)将 args 从一个函数传递到另一个函数,以确保 args 可变。我还能够通过 SCIPY minimize(优化)将 args 从一个函数传递到另一个函数,其中 args 是可变的。我的麻烦是将非可变输入pick 从一个函数传递到另一个函数。如果我将print(pick) 作为上面简化示例中每个已定义函数的第一行,并且如果我将这个函数链称为

callme = func3( 2 , func2(pick = pick, args) , [6, 0.5] )

然后我的代码最终会吐出一条错误消息

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

但首先它会执行以下操作:

1
2
1
2
2 # (from pick = 2 in func3)
[6   0.5]

如何/为什么会发生这种情况,是否可以将输入 pick 从一个函数发送到函数调用链中的另一个函数?

编辑:我的猜测是将pick作为类的对象传递,或者使用kwargs,或者将pick作为由单个元素组成的不可打包的元组传递;但我不确定这是否正确或如何实现。理想情况下,有一些我不知道的操作就像callme = func3( pick.func2 , func2, [6, 0.5] ) 一样简单。我尝试将pick 声明为global,但这会导致出现有关参数为全局的错误消息。

【问题讨论】:

【参考方案1】:

我从每个函数中删除了pick 作为输入,但将其作为变量保留在函数中。然后我把下面的代码放在函数链之前初始化pick

def selectdist(pick):
    ## 1 for original representation
    ## 2 for normal representation on semilog(x) axis
    ## 3 for normal representation on linearly-spaced ln(x) axis
    return int(pick)

pickdist = selectdist(3) # choose 1 2 or 3

在函数链之后,使用重新初始化的pick 运行函数链。由于它不再是从函数链顶部向下传递的参数,因此错误的根源已经消失。

【讨论】:

以上是关于我试图将一个非可变整数参数从一个函数传递给其他定义的函数;我的错误是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将可变参数函数模板参数传递给另一个函数

如何使用 jquery 将可变参数传递给匿名函数?

是否可以将可变数量的参数传递给redshift中的存储过程?

将其他参数传递给gtk函数

如何循环遍历动态大小的数组并将属性作为参数传递给可变参数函数?

将可变数量的 bash 命令行参数传递给 MATLAB 函数