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