没有与nargin和nargchk等价的东西,因为Python不需要它。可以在函数定义中直接用Python定义可选参数。例如:def myfunc(a=1, b=3):
在本例中,它允许您将a和{}设置为任何您想要的值,但是如果您不定义它们,它将使用您指定的默认值。因此,如果调用myfunc(),它会将a设置为1,并将{}设置为3。如果调用myfunc(5),它会将a设置为5,并将{}设置为3。也可以按名称调用,例如myfunc(b=10),它将a设置为1,并将{}设置为10。在
如果您希望参数是必需的,那么在函数定义中不要给它们赋值。因此在以下情况下,a是必需的,而{}是可选的:
^{pr2}$
如果希望用户能够指定任意数量的参数,可以使用*args(其中args可以是任何您想要的变量。所以这个:def myfunc(a=1, b=3, *args):
将第一个参数赋给a,第二个参数赋给b,其余参数赋给args。您也可以使用使用**kwargs(同样,kwargs可以是任何变量名)来定义参数。所以这个:def myfunc(a=1, b=3, *args, **kwargs):
执行与前一个相同的操作,但是name提供的除a和b之外的任何参数都将进入kwargs(这是一个字典)。在
因此,您不需要nargin和nargchk,通常只需定义所需的参数并为可选参数设置默认值。然后Python将自动处理检查,以确保指定了所需的选项,并且没有提供太多的参数。如果您需要捕获任意数量的附加参数,只需使用*args和**kwargs,您可以自己检查len是否正确。在
对于nargout,没有python等价物,因为python要求处理所有输出。所以如果你做return a, b,在myfun,a,和{}都必须处理。您可以简单地忽略一些,但必须显式地这样做。没有简单的方法来检查这些参数是否被忽略。假设我们在myfunc中有这个:return a, b, c, d
您只需要a,您可以:a, *_ = myfunc()
这会将第一个返回值放入a,并将剩余值转储到丢弃变量_(就像*args捕获所有剩余参数,*_捕获所有剩余输出)。例如,a和{},您可以:a, _, c, _ = myfunc()
你也可以直接从函数调用中建立索引,这是MATLAB不允许的。所以这也是可能的。为了得到第一个论点,你可以:a = myfunc()[0]
因此,由于在Python中很容易获得所需的返回值,并且由于输出值的隐式变量数非常难以正确处理,因此Python不支持它。如果确实要更改输出参数的数目,可以在函数定义中设置可选的命名参数。由于可选参数在Python中很容易实现,所以这不是一个大问题。但通常不需要。在
至于错误,是的,您只是raise适当的异常。Python在不同的情况下有不同类型的错误。raise TypeError('blah')是处理错误参数数的正确方法,其中blah是您想要的消息。在