3 ms·
The "identify this animal" example has a serious bug. This: def identify(animal): if animal.is_vertebrate(): return identify_vertebrate()
by ramanujan 15y ago
The "identify this animal" example has a serious bug. This:
def identify(animal):
if animal.is_vertebrate():
return identify_vertebrate()
else:
return identify_invertebrate()
should be
def identify(animal):
if animal.is_vertebrate():
return identify_vertebrate(animal)
else:
return identify_invertebrate(animal)
Arguably this mix of OO and procedural code is bad as well. But less arguably, the initial example (with a simple identify function) was far better than the rewrite.
- oinksoft 15y agoIn any case the else: is pointless.
- bryanh 15y agoI dunno, I like the readability of an explicit else.
- dustingetz 15y agoits subjective, arguably a style using ternary operator is better because it is composable - it evaluates as an expression, as opposed to a series of statements. it's something the lisp and functional programming people like - no implied dependency on order in which statements execute. i dunno if this is valid python but it demonstrates the idea doSomething( identify_vertebrate(animal) if animal.is_vertebrate() \ else identify_invertebrate(animal)) doSomething( if( is_vertebrate(animal) identify_vertebrate(animal) identify_invertebrate(animal))) (doSomething (if (is_vertebrate animal) (identify_vertebrate animal) (identify_invertebrate animal))) this is part of "referential transparency", and once you get past "OMG parens" you realize its a Good Thing. parens are caused by a style preferring composition of expressions over executing statements, not lisp.