Il 15/12/2020 12:25, Chris Angelico ha scritto:
On Tue, Dec 15, 2020 at 9:56 PM jak <[email protected]> wrote:this could be a way to emulate a long_jump: def f(i): if i < 10: i += 1 yield from f(i) else: yield i i = 0 retult = 0 for n in f(i): result = n break print(result)Note that this requires just as much cooperation as this version does: def f(i): if i < 10: return f(i + 1) return i result = f(0) The only difference is that "yield from" sorta kinda gives you a "maybe return", but you're not actually using that in your example, so it doesn't showcase that. But let's say you're searching a complex data structure for something: def find(obj, pred): if pred(obj): yield obj if isinstance(obj, list): for elem in obj: yield from find(elem, pred) if isinstance(obj, dict): for elem in obj.values(): yield from find(elem, pred) Taking the first matching element could be done without worrying too much about whether any subsequent elements would match. I wouldn't really call this a "long jump", though; this is a lazy filter that can be efficiently used to locate the first few results without calculating them all. ChrisA
You are right. In fact I used the word 'emulate' to mean that this is what (IMO) comes closest to a long jump.
Cheers. -- https://mail.python.org/mailman/listinfo/python-list
