Il 15/12/2020 12:25, Chris Angelico ha scritto:
On Tue, Dec 15, 2020 at 9:56 PM jak <nos...@please.ty> 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

Reply via email to