Python中的nargin功能(来自Matlab)

Python中的nargin功能(来自Matlab),python,matlab,Python,Matlab,我正在尝试翻译以下代码行: error(nargchk(3, 4, nargin)) if nargout > 2, error('too many output parameters'); end 我想把它翻译成Python。我还没有找到错误的等价物(尽管我可能只是在这里抛出一个异常?),nargchk和nargin。有人能提供关于如何翻译这行代码的任何信息吗 没有任何东西可以与nargin和nargchk等同,因为Python不需要它。可以在函数定义中直接在Python中定义可选参数

我正在尝试翻译以下代码行:

error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end

我想把它翻译成Python。我还没有找到错误的等价物(尽管我可能只是在这里抛出一个异常?),nargchk和nargin。有人能提供关于如何翻译这行代码的任何信息吗

没有任何东西可以与
nargin
nargchk
等同,因为Python不需要它。可以在函数定义中直接在Python中定义可选参数。例如:

def myfunc(a=1, b=3):
在这种情况下,它允许您将
a
b
设置为您想要的任何值,但如果您不定义它们,它将使用您指定的默认值。因此,如果调用
myfunc()
,它会将
a
设置为
1
,将
b
设置为3。如果调用
myfunc(5)
它会将
a
设置为
5
,将
b
设置为
3
。您还可以按名称调用,例如
myfunc(b=10)
,它将
a
设置为
1
,将
b
设置为10

如果您希望参数是必需的,只需在函数定义中不给它们赋值即可。因此,在以下情况下,
a
是必需的,而
b
是可选的:

def myfunc(a, b=3):
如果希望用户能够指定任意数量的参数,可以使用
*args
(其中
args
可以是您想要的任何变量。因此:

def myfunc(a=1, b=3, *args):
def myfunc(a=1, b=3, *args, **kwargs):
将第一个参数分配给
a
,第二个参数分配给
b
,其余参数分配给
args
。您也可以使用
**kwargs
通过名称定义的参数来执行此操作(同样,
kwargs
可以是任何变量名)。因此:

def myfunc(a=1, b=3, *args):
def myfunc(a=1, b=3, *args, **kwargs):
执行与前一个相同的操作,但是除了
a
b
之外,由name提供的任何参数都将进入
kwargs
(这是一个字典)

因此,您不需要
nargin
nargchk
,通常您只需定义所需的参数并为可选参数设置默认值。然后Python将自动处理检查,以确保指定了所需的选项,并且提供的参数不太多。如果您需要捕获任意numb对于其他参数,只需使用
*args
**kwargs
即可检查
len
是否正确

对于
nargout
,没有python等价物,因为python要求处理所有输出。因此,如果执行
返回a、b
,则在
myfun
中,
a
b
都必须处理。您可以忽略一些,但必须显式地执行此操作。没有简单的方法可以检查这些参数是否正在被处理忽略。假设我们在
myfunc
中有这个:

return a, b, c, d
如果您只需要
a
,您可以执行以下操作:

a, *_ = myfunc()
这会将第一个返回值放入
a
中,并将剩余值转储到丢弃变量
(就像
*args
捕获所有剩余参数一样,
*\u
捕获所有剩余输出)。例如,
a
c
,您可以执行以下操作:

a, _, c, _ = myfunc()
a = myfunc()[0]
您也可以直接从函数调用进行索引,这是MATLAB不允许的。因此这也是可能的。要获得第一个参数,您可以执行以下操作:

a, _, c, _ = myfunc()
a = myfunc()[0]
因此,由于在Python中很容易获得所需的返回值,并且输出值的隐式变量数是一个极难正确处理的问题,Python不支持它。如果确实要更改输出参数的数量,可以在函数定义中设置一个可选的命名参数来执行此操作。因为可选参数在Python中,这很容易,这不是一个大问题,但通常不需要


至于错误,是的,您只需
raise
相应的异常。Python在不同的情况下有不同类型的错误。
raisetypeerror('blah'))是错误的参数数的正确方法,其中<代码> BLAH <代码>是您想要的消息。

您读过MATLAB文档中您不确定的函数吗?尝试翻译功能不是函数,如果您认为等价于<代码> Valgin < /代码>是代码> *ARGs<代码>,那么<代码>n可以翻译成Python中的
len(args)
。我有Matlab背景,但对Python知之甚少,我发现你的答案非常有用,+1