代码之家  ›  专栏  ›  技术社区  ›  A.Torres

python中的nargin功能(来自matlab)

  •  1
  • A.Torres  · 技术社区  · 6 年前

    我试图翻译这些代码行:

    error(nargchk(3, 4, nargin))
    if nargout > 2, error('too many output parameters'); end
    

    我想把它翻译成python。我还没有找到错误的等价物(尽管我可能只是在这里抛出一个异常?)Nargchk和Nargin。有人能提供关于这行代码如何翻译的输入吗?

    谢谢您!

    1 回复  |  直到 6 年前
        1
  •  1
  •   TheBlackCat    6 年前

    没有什么能比得上 nargin nargchk 因为巨蟒不需要它。您可以直接在函数定义中定义python中的可选参数。例如:

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

    在这种情况下,它允许您设置 a b 如果不定义,则使用指定的默认值。所以如果你打电话 myfunc() ,它设置 1 到3。如果你打电话 myfunc(5) 它设置 5 3 . 您也可以按姓名呼叫,例如 myfunc(b=10) ,设置 到10。

    如果您希望参数是必需的,就不要在函数定义中为它们赋值。所以在下面的例子中, 是必需的,而 是可选的:

    def myfunc(a, b=3):
    

    如果希望用户能够指定任意数量的参数,则可以使用 *args (何处) args 可以是您想要的任何变量。所以这是:

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

    将第一个参数赋给 ,第二个参数 ,以及 阿尔茨海默病 . 也可以使用名称定义的参数 **kwargs (再一次, kwargs 可以是任何变量名)。所以这是:

    def myfunc(a=1, b=3, *args, **kwargs):
    

    执行与前一个相同的操作,但名称提供的任何参数 会进去的 关键字参数 (这是一本词典)。

    所以你不需要 函数输入变量数 NARGCHK公司 一般来说,您只需定义所需的参数,并为可选参数设置默认值。然后,python将自动处理检查,以确保指定了所需的选项,并且没有提供太多的参数。如果需要捕获任意数量的附加参数,只需使用 *精氨酸 **夸格斯 你可以检查一下 len 是正确的自己。

    为了 nargout ,没有与python等效的,因为python需要处理所有输出。所以如果你这样做的话 return a, b myfun , 必须同时处理。您可以简单地忽略一些,但必须明确地做到这一点。检查这些参数是否被忽略是不容易的。假设我们有这个 myfunc :

    return a, b, c, d
    

    你只想 ,您只需执行以下操作:

    a, *_ = myfunc()
    

    这会将第一个返回值放入 并将余数转储到丢弃变量中 _ (就像 *精氨酸 捕获所有剩余参数, *_ 捕获所有剩余输出)。比如说, c ,可以执行以下操作:

    a, _, c, _ = myfunc()
    

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

    a = myfunc()[0]
    

    因此,由于在python中很容易获得所需的返回值,而且输出值的隐式变量数对于正确处理是一种极大的痛苦,所以python不支持它。如果确实要更改输出参数的数目,可以在函数定义中设置一个可选的命名参数。因为可选参数在Python中很容易实现,所以这不是一个大问题。但通常不需要。

    至于错误,是的,你只是 raise 适当的例外。对于不同的情况,python有不同类型的错误。 raise TypeError('blah') 是否正确处理错误的参数个数,其中 blah 是您想要的信息。