【问题标题】:Convert varargin and nargin to from Matlab to Python将 varargin 和 nargin 转换为从 Matlab 到 Python
【发布时间】:2018-02-12 17:46:57
【问题描述】:

如何将以下 Matlab 代码转换为 Python? Python中是否有与Matlab的vararginnargin等效的函数?

function obj = Con(varargin)

    if nargin == 0
        return
    end

    numNodes = length(varargin);
    obj.node = craft.empty();
    obj.node(numNodes,1) = craft();

    for n = 1:numNodes                
        % isa(obj,ClassName) returns true if obj is an instance of 
        % the class specified by ClassName, and false otherwise. 

        % varargin is an input variable in a function definition 
        % statement that enables the function to accept any number 
        % of input arguments.

        if isa(varargin{n},'craft')
            obj.node(n) = varargin{n};
        else
            error(Invalid input for nodes property.');
        end
    end
end

【问题讨论】:

  • 幸好你不是在寻找varargout——这在 Python 中是不可能的。
  • @user2357112。它是,但实施方式不同。在 MATLAB 中,您可以访问 nargout。在 Python 中,可以传入标志来指示您想要哪些输出(就像 scipy 经常做的那样),或者接受所有输出并自己丢弃不需要的输出。
  • @OP。使用*args,其中len(args) 是nargin

标签: python matlab arguments


【解决方案1】:

varargin 的等价物

*args**kwargs 是一个常见的习惯用法,允许函数使用任意数量的参数。单星号形式 (*args) 用于传递 非关键字、可变长度参数列表,双星号 (**kwargs) 形式用于传递关键字,变长参数列表。

这里是一个如何使用非关键字形式的例子:

>>> def test_args(*args):
...     # args is a tuple
...     for a in args:
...         print(a)
...
>>> test_args(1, 'two', 3)
1
two
3

这里是一个如何使用关键字形式的例子:

>>> def test_kwargs(**kwargs):
...     # kwargs is a dictionary
...     for k, v in kwargs.items():
...         print('{}: {}'.format(k, v))
...
>>> test_kwargs(foo = 'Hello', bar = 'World')
foo: Hello
bar: World

nargin 的等价物

由于nargin 只是函数输入参数的数量(,强制参数的数量+可选参数的数量),您可以使用len(args)len(kwargs) 来模拟它。

def foo(x1, x2, *args):
    varargin = args
    nargin = 2 + len(varargin) # 2 mandatory arguments (x1 and x2) 
    # ...

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2021-04-17
    • 2017-11-23
    • 2021-11-16
    相关资源
    最近更新 更多