matlab 出错点返回所有变量,python - 返回变量Matlab和Python? - 堆栈内存溢出

简洁版本

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'比较方式) ,否则将verbose设置为true 。

在python中,对可选参数的处理是内置的。 您可以通过设置name=value ,在函数定义中为参数指定默认值,其中name是参数名称,而value是默认值。 同样,由于历史原因,MATLAB通常使用'on'和'off'代替true和false 。 这在Python中几乎从未实现过,人们只使用True和False 。 因此,您可以在Python中指定相同的内容,如下所示:

def hysime(y, n, Rn, verbose=True):

这使y , n和Rn必需参数,但让verbose为可选。

这不适用于将verbose设置为字符串'off' 。 就像我说的那样,由于历史原因,这在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将丢弃其余的值。 因此,该函数可以只返回[kf, Ek] ,而不用搞乱varargout ,而MATLAB将执行相同的操作。 如果有人尝试使用两个以上的输出来调用该函数,则会自动发生错误,因此这也是不必要的。

仅当您希望程序根据输出数量更改其行为时,才需要以这种方式处理varargout 。 在这种结构中,您这样做的主要原因是,如果eK计算成本很高,在这种情况下,您将执行以下操作:

varargout(1) = {kf};

if nargout == 2

# calculate eK here

varargout(2) = {Ek};

end

至于return ,这仅在MATLAB中才需要,如果您想使函数在正常结束之前提前停止。 一旦正常到达终点,它将自动return 。 因此,如果您指定的最后一个代码块是函数的结尾,则return是多余的。

因此,您在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

至于Python,正如我在对您的其他回答中提到的那样,Python要求处理所有返回的值。 除非您明确告知,否则它将永远不会丢弃返回的值。 在您的情况下,最简单的解决方案是在函数的末尾添加return kf, Ek 。 如果有人同时想要kf和Ek ,他们可以这样做:

kf, Ek = hysime(y, n, Rn)

如果他们只想要kf ,他们可以做到(其中_是您不关心的变量的python约定):

kf, _ = hysime(y, n, Rn)

要么:

kf = hysime(y, n, Rn)[0]

因此,python代码将是:

def hysime(y, n, Rn, verbose=True):

# rest of the function here

return 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参数并将其设置为True ,则返回kf, Ek ,否则返回kf 。 但是,在Python中,您实际上不希望这样做,除非计算Ek花费一些主要的额外费用,这种情况下似乎没有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值