patternpythonModerate
Is using the result of cmp() as an index "too cryptic"?
Viewed 0 times
resultthecryptictoousingindexcmp
Problem
This is a very subjective question, but I'm curious as to other people's opinions.
Would you find this bit of code distasteful? Is it cryptic and unreadable, or is it using features of the language in an elegant way?
The alternative obviously being explicit if-else statements:
I personally find the verbose if-else logic in the latter solution, and the assumed equality in the 3rd branch, less appealing.
Would you find this bit of code distasteful? Is it cryptic and unreadable, or is it using features of the language in an elegant way?
def winning_side(home_goals, away_goals):
"""Takes a home score and an away score, and returns the winner
Return DRAW, HOME or AWAY depending on the outcome
"""
return (DRAW, HOME, AWAY)[cmp(home_goals, away_goals)]The alternative obviously being explicit if-else statements:
def winning_side(home_goals, away_goals):
"""Takes a home score and an away score, and returns the winner
Return DRAW, HOME or AWAY depending on the outcome
"""
if home_goals > away_goals:
return HOME
elif away_goals > home_goals:
return AWAY
else:
return DRAWI personally find the verbose if-else logic in the latter solution, and the assumed equality in the 3rd branch, less appealing.
Solution
The documentation to cmp says nothing about the return value except it being negative, zero or positive, so you rely on implementation-dependent behaviour. This exact function will also not work in Python 3, as there is no
I'd say use the second option or shorten it a bit:
cmp function anymore.I'd say use the second option or shorten it a bit:
def winning_side(home_goals, away_goals):
if home_goals == away_goals:
return DRAW
return HOME if home_goals > away_goals else AWAYCode Snippets
def winning_side(home_goals, away_goals):
if home_goals == away_goals:
return DRAW
return HOME if home_goals > away_goals else AWAYContext
StackExchange Code Review Q#80279, answer score: 11
Revisions (0)
No revisions yet.