python中的nargin功能(来自Matlab)

时间:2018-07-18 16:56:24

标签: python matlab

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

histmatch -c rgb zelda1.jpg zelda1_tint.jpg result3.jpg

我想将其翻译成Python。我还没有找到等效的错误(尽管我也许可以在这里抛出异常?),nargchk和nargin。有人可以提供有关此代码行如何翻译的任何输入吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

没有等效于narginnargchk的东西,因为Python不需要它。您可以在函数定义中直接在Python中定义可选参数。例如:

def myfunc(a=1, b=3):

在这种情况下,您可以将ab设置为所需的任何值,但是,如果未定义它们,它将使用您指定的默认值。因此,如果您呼叫myfunc(),则将a设置为1,而b则将3设置。如果您呼叫myfunc(5),则将a设置为{{ 1}}和5b。您还可以按名称呼叫,例如3,它将myfunc(b=10)设置为a,将1设置为10。

如果需要参数,则不要在函数定义中为其分配任何内容。因此,在以下情况下,b是必需的,而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(这是一个字典)中。

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

对于len,没有python等效项,因为python要求处理所有输出。因此,如果您执行nargout,则必须同时处理return a, bmyfuna中的b。您可以简单地忽略某些内容,但是必须明确地执行此操作。没有简单的方法来检查这些参数是否被忽略。假设我们在myfunc中有此内容:

return a, b, c, d

您只需要a,您可以这样做:

a, *_ = myfunc()

这会将第一个返回的值放在a中,并将其余的值转储到一次性变量_中(就像*args捕获所有剩余参数,*_捕获所有剩余的输出)。例如,ac可以:

a, _, c, _ = myfunc()

您也可以直接从函数调用建立索引,而MATLAB不允许这样做。因此这也是可能的。因此,要获得第一个参数,您可以执行以下操作:

a = myfunc()[0]

因此,由于在Python中很容易获得所需的返回值,并且由于输出值的隐式变量数很难正确处理,因此Python不支持它。如果您确实想更改输出参数的数量,可以在函数定义中设置一个可选的命名参数。由于可选参数在Python中很简单,因此这不是一个大问题。但这通常不是必需的。

对于错误,是的,您只是raise适当的例外。 Python在不同情况下具有不同类型的错误。对于错误数量的参数,raise TypeError('blah')是正确的方法,其中blah是您想要的消息。