Python and
и or
операторы эквивалентны следующим выражениям if:
# NB: These work as intended for boolean values.
(a or b) is (a if a else b)
(a and b) is (b if a else a)
def select_joke(category):
"""Equivalent to your code."""
jokes = all_jokes[category if category else 'default']
shuffle(jokes)
return jokes[0]
Это позволяет сайтам вызовов, которые прекрасно принимают 'default'
шутки, проходить в ''
или None
. Код Python имеет тенденцию выглядеть более красиво при использовании or
вместо выражений if, которые соответствуют этому шаблону (замена ложного значения другим), особенно если вы используете аргументы функции, которые по умолчанию равны ложному значению.
В качестве примечания вы можете упростить свою функцию с помощью random.choice
:
def select_joke(category=None):
return random.choice(all_jokes[category or 'default'])
select_joke() # category will be 'default'.
select_joke('default') # category will be 'default'.
select_joke(None) # category will be 'default'.
select_joke('') # category will be 'default'.
select_joke('puns') # category will be 'puns'.