我正在尝试翻译以下代码:
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
我想将它翻译成Python。尽管可以在这里抛出异常,但我还没有找到错误的等效语句(?),nargchk和nargin。是否有人可以提供任何关于如何翻译这行代码的输入?
Python没有类似于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):
a
,第二个参数指定为b
,并将剩余的参数指定为args
。您还可以通过使用按名称定义的参数**kwargs
(同样,kwargs
可以是任何变量名)来执行此操作。因此,以下内容适用:def myfunc(a=1, b=3, *args, **kwargs):
a
和b
参数外,提供的其他命名参数将进入kwargs
(这是一个字典)。nargin
和nargchk
,您只需定义所需的参数并为可选参数设置默认值。然后,Python会自动处理检查以确保指定了必需选项,并且没有提供过多的参数。如果您需要捕获任意数量的附加参数,请使用*args
和**kwargs
,并自行检查len
是否正确。nargout
,在Python中没有相应的等效物,因为Python要求处理所有输出。因此,如果您执行return a,b
,在myfun
中,必须同时处理a
和b
。您可以简单地忽略一些内容,但必须明确说明。没有简单的方法来检查是否正在忽略这些参数。因此,假设我们在myfunc
中有以下内容:return a, b, c, d
a
,那么你可以这样做:a, *_ = myfunc()
a
中,并将剩余的值放在丢弃变量_
中(就像*args
获取所有剩余参数一样,*_
获取所有剩余输出)。例如,对于a
和c
,您可以这样做:a, _, c, _ = myfunc()
您还可以直接从函数调用中进行索引,这是MATLAB不允许的。因此,这也是可能的。所以要获取第一个参数,您可以执行以下操作:
a = myfunc()[0]
raise
即可。Python针对不同的情况有不同类型的错误。对于参数数量错误,raise TypeError('blah')
是正确的方法,其中的blah
是你想要的消息。
varargin
的等价物是*args
,那么在 Python 中,nargin
可以被翻译成len(args)
。 - Kefeng91