我正在尝试翻译以下代码行:
histmatch -c rgb zelda1.jpg zelda1_tint.jpg result3.jpg
我想将其翻译成Python。我还没有找到等效的错误(尽管我也许可以在这里抛出异常?),nargchk和nargin。有人可以提供有关此代码行如何翻译的任何输入吗?
谢谢!
答案 0 :(得分:1)
没有等效于nargin
和nargchk
的东西,因为Python不需要它。您可以在函数定义中直接在Python中定义可选参数。例如:
def myfunc(a=1, b=3):
在这种情况下,您可以将a
和b
设置为所需的任何值,但是,如果未定义它们,它将使用您指定的默认值。因此,如果您呼叫myfunc()
,则将a
设置为1
,而b
则将3设置。如果您呼叫myfunc(5)
,则将a
设置为{{ 1}}和5
至b
。您还可以按名称呼叫,例如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
(这是一个字典)中。
因此,您不需要kwargs
和nargin
,通常只需定义所需的参数并为可选参数设置默认值即可。然后,Python将自动进行检查以确保指定了必需的选项,并且没有提供太多的参数。如果需要捕获任意数量的其他参数,只需使用nargchk
和*args
,然后可以检查**kwargs
是否正确。
对于len
,没有python等效项,因为python要求处理所有输出。因此,如果您执行nargout
,则必须同时处理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
是您想要的消息。