如何传递 3 个参数作为 Python 中的一个数组?

Posted

技术标签:

【中文标题】如何传递 3 个参数作为 Python 中的一个数组?【英文标题】:How can I pass 3 arguments being one of them an array in Python? 【发布时间】:2019-10-31 02:09:21 【问题描述】:

我有以下函数,我通常会将VmVp 作为参数传递,但是在某些情况下,我想添加一个输入参数numpy.array,称为Yin

def solveTransmissionLineDistrbutedE(self,Vm,Vp,*,Yin=0):

在这种情况下,我在使用 Yin 调用我的函数时遇到了一个问题 numpy.arry 像下面这样一个

ec_0_04 = numpy.array([
                      [0.00188453428035827 + 0.0124200286145695j],
                      [0.00188453428035827 + 0.0124200286145695j]
                      ])
for yin in ec_0_04:
        EC,C = pinsAsLine.solveTransmissionLineDistrbutedE(-1,-1,*yin)

然后,Python 报错

    EC,C = pinsAsLine.solveTransmissionLineDistrbutedE(-1,-1,numpy.array([0.00188453428035827 + 0.0124200286145695j]))
TypeError: solveTransmissionLineDistrbutedE() takes 3 positional arguments but 4 were given

我确实理解错误,Python 看到三个函数的四个输入,但我不确定如何正确地将我的数组作为输入传递给函数。

有什么提示吗?

提前致谢,

【问题讨论】:

如果我错了就咬我,但我认为 pinAsLine 是您传递的第四个(或者更确切地说是第一个)参数。如果 solveTransmission.... 是您的方法,请在其他参数之前添加“this” How do I create a Python function with optional arguments?的可能重复 代码不匹配错误信息... solveTransmissionLineDistrbutedE(-1,-1,yin)? 【参考方案1】:

你误解了*的用法。

你这样声明你的方法:

def solveTransmissionLineDistrbutedE(self,Vm,Vp,*,Yin=0):

这意味着您的函数将 self 作为第一个参数,VmVp 作为第二个和第三个参数。它们是位置参数。然后它将接受命名参数(或仅关键字参数):Yin

最后,你应该这样调用你的方法:

for yin in ec_0_04:
     EC,C = pinsAsLine.solveTransmissionLineDistrbutedE(-1,-1,Yin=yin)

顺便说一句,我可能错了,但我认为* 在您的方法声明中没有任何用处。

【讨论】:

通过这样做我解决了调用者的问题,但现在在solveTransmissionLineDistrbutedE 内部我使用fsolve 抱怨TypeError: fsolve: there is a mismatch between the input and output shape of the 'func' argument 'CandGTransmissionLineDistributedE'.Shape should be (2,) but it is (2, 1). 我该如何解决这个问题? 如果不知道你的函数内部是什么,我将无法判断......你还应该知道你将 0 作为 yin 的 delault 值,但传递一个数组:这将将来可能会给您带来麻烦 里面的函数有这样的调用 g,c = fsolve(self.CandGTransmissionLineDistributedE,self.initialGoCo,Yin) 其中 initialGoCo 是一个 numpy.array 的两个元素 我不知道......也许你应该发布另一个关于它的问题?【参考方案2】:
for yin in ec_0_04:
        EC,C = pinsAsLine.solveTransmissionLineDistrbutedE(-1,-1,Yin=yin)

将整个数组作为参数传递。

【讨论】:

以上是关于如何传递 3 个参数作为 Python 中的一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python类中将方法名称作为参数传递

如何将2D数组作为参数从C#传递给python

如何在python中将字典项作为函数参数传递? [复制]

python中如何将函数的运算结果传出来作为函数参数使用?

python如何将可选参数或关键字参数从一个函数传递到另一个函数?

从 C++ 调用 python 函数时如何将 C++ 类作为参数传递?