将varargin和nargin转换为Matlab到Python

时间:2018-02-12 17:46:57

标签: python matlab arguments

如何将以下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

1 个答案:

答案 0 :(得分:9)

varargin等效

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

以下是如何使用非keyworded 表单的示例:

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

以下是如何使用 keyworded 表单的示例:

>>> 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)或{来模拟它{1}}。

len(kwargs)