gpt4 book ai didi

python - Python 中 yield 关键字的 Matlab 等价物是什么?

转载 作者:太空狗 更新时间:2023-10-30 00:32:52 25 4
gpt4 key购买 nike

我需要一次生成多个结果,而不是一次生成一个数组中的所有结果。

我如何在 Matlab 中使用类似于 Python 的语法生成器来做到这一点?

最佳答案

当执行使用 yield 关键字的函数时,它们实际上返回一个生成器。生成器是一种迭代器。虽然 MATLAB 不提供两者的语法,但您可以实现 "iterator interface"你自己。下面是一个类似于 python 中的 xrange 函数的例子:

classdef rangeIterator < handle
properties (Access = private)
i
n
end

methods
function obj = rangeIterator(n)
obj.i = 0;
obj.n = n;
end

function val = next(obj)
if obj.i < obj.n
val = obj.i;
obj.i = obj.i + 1;
else
error('Iterator:StopIteration', 'Stop iteration')
end
end

function reset(obj)
obj.i = 0;
end
end
end

这是我们如何使用迭代器:

r = rangeIterator(10);
try
% keep call next() method until it throws StopIteration
while true
x = r.next();
disp(x);
end
catch ME
% if it is not the "stop iteration" exception, rethrow it as an error
if ~strcmp(ME.identifier,'Iterator:StopIteration')
rethrow(ME);
end
end

请注意,当在 Python 中的迭代器上使用构造 for .. in .. 时,它在内部执行类似的操作。

您可以使用常规函数而不是类来编写类似的东西,方法是使用 persistent 变量或闭包来存储函数的本地状态,并在每次调用时返回“中间结果” .

关于python - Python 中 yield 关键字的 Matlab 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com