• rwhitisissle@lemmy.ml
    link
    fedilink
    arrow-up
    2
    arrow-down
    1
    ·
    1 year ago

    For newer python people, they see return a or b and typically think it returns a boolean if either is True. Nope. Returns a if a is truthy and then checks if b is truthy. If neither are truthy, it returns b.

    • Arthur Besse@lemmy.ml
      link
      fedilink
      arrow-up
      7
      ·
      edit-2
      1 year ago

      Returns a if a is truthy and then checks if b is truthy. If neither are truthy, it returns b.

      Not quite. If a is not truthy, then the expression a or b will always return b.

      So, there is never any reason to check the truthiness of b.

      you can paste this in your repl to confirm it does not.
      class C:
       def __repr__(self): return [k for k, v in globals().items() if v is self][0]
       def __bool__(self):
        print(f"{self}.__bool__() was called")
        return False
      
      a, b = C(), C()
      print(f"result: {a or b}")
      
      output
      a.__bool__() was called
      result: b