如何将以下Matlab代码转换为Python?在Python中是否有与Matlab的varargin
和nargin
等效的函数?
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
答案 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)