622
submitted 11 months ago by jroid8@lemmy.world to c/programmerhumor@lemmy.ml
you are viewing a single comment's thread
view the rest of the comments
[-] rwhitisissle@lemmy.ml 1 points 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.

[-] cypherpunks@lemmy.ml 7 points 11 months ago* (last edited 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}")

spoiler output

a.__bool__() was called
result: b

:::

[-] rwhitisissle@lemmy.ml 3 points 11 months ago

Ah, good catch.

this post was submitted on 08 Dec 2023
622 points (96.4% liked)

Programmer Humor

32509 readers
419 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS