• lugal@sopuli.xyz
    link
    fedilink
    arrow-up
    3
    ·
    22 hours ago

    I think it’s intended as “not only when” because it would make sense to have an “if empty” case but the way it is, it doesn’t make sense

    • Vigge93@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      21 hours ago

      I think it does make sense, it’s a “did this loop exit naturally? If so, do x”. This makes a lot of sense if you, for example, have a loop that checks a condition and breaks if that condition is met, e.g. finding the next item in a list. This allows for the else statement to set some default value to indicate that no match was found.

      Imo, the feature can be very useful under certain circumstances, but the syntax is very confusing, and thus it’s almost never a good idea to actually use it in code, since it decreases readability a lot for people not intimately familiar with the language.

      Edit: Now, this is just guessing, but what I assume happens under the hood is that the else statement is executed when the StopIteration exception is recieved, which happens when next() is called on an exhausted iterator (either empty or fully consumed)

      • Saleh@feddit.org
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        2 hours ago

        Couldn’t you just handle this with:

        
        breakflag = False
        
        for x in iterator:
        
             if breakcondition(x):
                    breakflag = True
                    break  
             dostuff()
        
      • lugal@sopuli.xyz
        link
        fedilink
        arrow-up
        1
        ·
        7 hours ago

        Thinking about it, it totally makes sense and has in inherent logic, even tho it’s not intuitive