• stebo02@sopuli.xyz
    link
    fedilink
    arrow-up
    22
    arrow-down
    1
    ·
    11 months ago

    Python:

    return a or b

    i like it because it reads like a sentence so it somewhat makes sense

    and you can make it more comprehensive if you want to:

    return a if a is not None else b

    • Turun@feddit.de
      link
      fedilink
      arrow-up
      14
      ·
      edit-2
      11 months ago

      This diverges from the OP code snippets if a has the value False.

    • alehc@lemmy.world
      link
      fedilink
      arrow-up
      8
      arrow-down
      1
      ·
      11 months ago

      I personally dislike this because when you read “or” you expect some boolean result not a random object :/

    • rwhitisissle@lemmy.ml
      link
      fedilink
      arrow-up
      2
      arrow-down
      1
      ·
      11 months 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
        11 months 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