短版
MATLAB代码应该是这样写的:
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
如果你了解MATLAB,这应该更清楚(大部分)对应的python代码可以这样编写:
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
长版
此函数需要3或4个输入参数,如果未提供第四个参数,则设置默认值然而,它的实现方式比需要的复杂得多(尽管我经常看到这种模式)。理想情况下,在Matlab中,您可以指定类似的内容:
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
所以它所做的是把第一个参数放在变量中
y
,变量中的第二个
n
,中的第三个
Rn
,如果指定了第四个,则将其放入
verbose
(基于它与字符串的比较方式
'off'
),否则设置
冗长的
到
true
.
在python中,可选参数的处理是内置的。可以通过设置
name=value
,其中
name
是参数名和
value
是默认值另外,出于历史原因,Matlab经常使用
'on'
和
'关闭'
而不是
真的
和
false
是的。这在python中几乎从来没有实现过,人们只是使用
True
和
False
是的。所以您可以在python中指定相同的内容,如下所示:
def hysime(y, n, Rn, verbose=True):
这使得
是的
,
n个
,和
注册护士
必需的参数,但是
冗长的
可选择。
这不适用于
冗长的
设置为字符串
'关闭'
. 正如我所说,由于历史原因,这在Matlab中很常见,但是如果可以避免的话,您真的不应该再在Matlab中这样做了,而且您绝对不应该在Python中这样做。但如果你真的真的需要处理这个案子,你可以做:
def hysime(y, n, Rn, verbose=True):
if isinstance(verbose, str):
verbose = verbose.lower() != 'off'
对于输出,Matlab代码的作用是让函数返回一个或两个值。所以有人可以这样做:
kf = hysime(y, n, Rn);
或者
[kf, Ek] = hysime(y, n, Rn);
然而,这样做的方式也比必要的复杂。如果只返回两个值,并且只使用一个返回值,则Matlab将丢弃其余的值。所以不要胡闹
varargout
,函数可以返回
[kf, Ek]
而MATLAB也会做同样的事情如果有人试图调用具有两个以上输出的函数,则会自动发生错误,因此这也是不必要的。
处理
瓦拉戈
只有当您希望程序根据输出的数量更改其行为时,才需要这样做。在这种结构中,您这样做的主要原因是
eK
计算起来很昂贵,在这种情况下,你会做这样的事情:
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
至于
return
,只有在希望使函数在正常到达结束之前提前停止时,才需要在MATLAB中使用一旦它正常到达终点,它将
返回
自动因此,如果您指定的最后一段代码是函数的结尾,那么
返回
是多余的。
因此,您在MATLAB中显示的所有代码都可以简化为:
函数[kf,ek]=hytime(y,n,rn,verbose);
错误(nargchk(3,4,nargin))
如果nargin<4
verbose=true;
其他的
verbose=~strcmpi(verbose,'off');
结束
至于python,正如我在
other answer to you
,Python要求处理所有返回值除非您明确告诉它,否则它永远不会丢弃返回的值对你来说,最简单的解决方法就是
return kf, Ek
在函数的末尾如果有人两者都想要
kf
和
Ek
,他们可以:
kf, Ek = hysime(y, n, Rn)
如果他们只想
肯德基
,他们可以(在
_
是您不关心的变量的python约定):
kf, _ = hysime(y, n, Rn)
或:
kf = hysime(y, n, Rn)[0]
所以python代码是:
定义时间(y,n,rn,verbose=true):
#函数的其余部分
返回kf,Ek
如果您真的希望能够有一个或两个返回值,则需要有另一个参数来更改行为。例如:
def hysime(y, n, Rn, verbose=True, ret_eK=False):
# rest of the function here
return (kf, Ek) if ret_eK else kf
在这种情况下,如果
ret_eK
参数已指定并设置为
真的
,然后
kf, Ek
被退回,否则就
肯德基
被退回但是在Python中,除非有一些额外的计算成本,否则您真的不想这样做
埃克
,这在本例中似乎不存在。