没有与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]
因此,由于在 Python 中很容易获得所需的返回值,并且由于输出值的隐式变量数量很难正确处理,因此 Python 不支持它。如果你真的想改变输出参数的数量,你可以在函数定义中设置一个可选的命名参数来做到这一点。由于可选参数在 Python 中很简单,因此这不是一个大问题。但通常不需要。
至于错误,是的,您只需 raise 适当的异常。对于不同的情况,Python 有不同类型的错误。 raise TypeError('blah') 是错误数量参数的正确方法,其中 blah 是您想要的消息。