如何传递 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 【问题描述】:我有以下函数,我通常会将Vm
和Vp
作为参数传递,但是在某些情况下,我想添加一个输入参数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
作为第一个参数,Vm
和 Vp
作为第二个和第三个参数。它们是位置参数。然后它将接受命名参数(或仅关键字参数):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 中的一个数组?的主要内容,如果未能解决你的问题,请参考以下文章