Как использовать тернарный оператор Python

Опубликовано: 2023-01-04

Это руководство научит вас использовать тернарный оператор в Python. Вы изучите синтаксис и закодируете несколько примеров, чтобы понять, как это работает.

Мы начнем с рассмотрения того, как работает условный оператор if-else, а затем узнаем, как написать эквивалентное выражение с использованием тернарного оператора.

Далее мы напишем несколько примеров, а затем научимся эмулировать поведение тернарного оператора Python с помощью кортежа и словаря Python. Наконец, мы рассмотрим несколько вариантов использования, когда вам следует использовать тернарный оператор.

Давайте начнем!

Оператор If-Else в Python: обзор

Вы можете кодировать, запустив Python REPL или в онлайн-редакторе Python Geekflare.

Общий синтаксис оператора if-else в Python выглядит следующим образом:

 if condition: # do this else: # do this

В приведенном выше фрагменте condition обозначает условие, которое необходимо проверить. Если условие оценивается как True , то срабатывает блок if. Если условие оценивается как False , то выполняются операторы внутри блока else.

Вот пример, где переменной game_over присваивается логическое значение в зависимости от того, меньше ли значение energy или равно нулю.

  • Если energy <= 0 , game_over имеет значение True .
  • game_over имеет значение False.

В следующем фрагменте кода показано, как это сделать с помощью условных операторов if-else:

 energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True

В этом примере energy равна -1, что меньше 0. Таким образом, game_over имеет значение True.

Тернарный оператор Python: синтаксис и примеры

python-тернарный-оператор-1

В Python есть тернарный оператор, который во многом похож на тернарный условный оператор в таких языках, как C и C++. Общий синтаксис для его использования следующий:

 expression1 if condition else expression2

Давайте разберем приведенный выше синтаксис:

  • condition : условие для проверки.
  • expression1 : выражение для оценки истинности условия.
  • expression2 : выражение для оценки, является ли условие ложным.

Теперь мы определим, какими должны быть expression1 , expression2 и condition из версии кода if-else.

троичный op-ex1

Собрав все это вместе, мы имеем следующее использование тернарного оператора Python.

 game_over = True if energy <= 0 else False print(game_over) # True

Давайте закодируем другой пример. Предположим, вы управляете книжным магазином и предоставляете читателям скидку на покупку в зависимости от того, как часто они посещали ваш магазин за последний год.

Пусть numVisits обозначает количество посещений.

  • Если numVisits > 7 , процент discount_perc , Discount_perc равен 20.
  • В противном случае, discount_perc равно 5.

Мы используем тернарный оператор, чтобы присвоить значение переменной discount_perc .

 numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)

Далее мы узнаем, как эмулировать тернарный оператор, используя кортеж Python и словарь.

Эмуляция тернарного оператора с помощью Python Tuple

Как и все итерации в Python, кортежи следуют нулевой индексации. Итак, если у вас есть два элемента в кортеже, tuple_name[0] обозначает первый элемент в кортеже, а tuple_name[1] — второй элемент в кортеже.

Основными типами данных в Python являются целые числа, числа с плавающей запятой, строки и логические значения. Python поддерживает приведение типов, которое позволяет вам представлять конкретный тип данных его эквивалентным представлением в другом типе данных.

Запустите Python REPL и выполните следующие примеры. Если вы попытаетесь преобразовать целые числа в логические значения, вы заметите следующее:

  • bool(0) равно False .
  • bool(<any non-zero integer>) возвращает True .
 >>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True

Точно так же при преобразовании Boolean в целые числа мы имеем следующее:

 >>> int(True) 1 >>> int(False) 0

Объединив приведение типов и индексацию, мы можем сделать следующее:

  • Элемент с индексом 0 в кортеже: значение, которое будет использоваться, когда condition имеет значение False .
  • Элемент с индексом 1 в кортеже: значение, которое будет использоваться, когда condition равно True .

Используя вышеизложенное, мы имеем следующее:

 >>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20

Здесь условие numVisits > 7 True , так как numVisits равно 10. Поскольку int(True) равно 1, значение discount_perc равно 20, элемент с индексом 1.

Эмуляция тернарного оператора с помощью словаря Python

Вы можете установить True и False в качестве ключей словаря. И вы можете установить expression1 и expression2 как значения, соответствующие ключам True и False соответственно.

 some_dict = {True: expression1, False: expression2 }

Что делать дальше? Теперь, если вы используете some_dict[condition] , expression1 , соответствующее ключу True , оценивается, если condition равно True . И expression2 оценивается, когда condition равно False .

Давайте напишем код для примера discount_perc (снова), но на этот раз с использованием словаря Python.

 >>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20

Здесь numVisits = 10 , что больше 7. Следовательно, условие numVisits > 7 равно True . Таким образом discount_dict[numVisits > 7] оценивается как Discount_dict discount_dict[True] , что равно 20.

Всегда ли следует использовать тернарный оператор Python?

Следует ли вам всегда использовать тернарный оператор Python

Итак, мы научились использовать тернарный оператор. Но должны ли мы всегда использовать тернарный оператор? Что ж, тернарный оператор может быть не лучшим выбором для всех случаев использования. Этот раздел разбивается, когда вы предпочитаете использовать тернарный оператор вместо операторов if-else. Мы также рассмотрим, когда нам следует рассмотреть возможность использования оператора if-else вместо тернарного оператора.

Более краткие, чем блоки If-Else

Как уже упоминалось, в Python выражение тернарного оператора является более кратким, чем оператор if-else. Поэтому вы можете использовать его для проверки условий и условного вычисления выражений на лету.

В следующем примере nums — это список из 100 случайно сгенерированных целых чисел. Для каждого из 100 чисел мы проверяем, является ли оно нечетным или четным. И эта оценка происходит внутри f-строки.

 import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
 # sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even

Тернарный оператор требует предложения Else

Когда вы используете условные операторы if-else, предложение else является необязательным. Возьмем пример. Переменная game_over устанавливается в значение True , если energy падает до значения, меньшего или равного нулю.

Однако, если energy больше нуля, переменная game_over никогда не инициализируется. Таким образом, вы столкнетесь с ошибками, если попытаетесь получить доступ к переменной game_over .

 energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
 Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined

Один из способов исправить это — изначально установить для game_over значение False и обновить его до True , если уровень энергии меньше или равен нулю.

 energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")

Однако при использовании тернарного оператора Python, эквивалентного приведенному выше, предложение else не является необязательным. Тернарный оператор требует, чтобы выражение оценивалось, когда condition имеет значение False .

 game_over = True if energy <= 0 else False

Если вы измените приведенное выше значение на game_over = True if energy <= 0 , удалив часть else, вы столкнетесь с синтаксической ошибкой, как показано ниже:

 File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax

Чтобы проверить наличие нескольких условий, используйте операторы If-Else

Рассмотрим пример: каждый вопрос в наборе вопросов для собеседования по кодированию имеет связанную оценку сложности. В зависимости от этой оценки мы присваиваем конкретному вопросу один из трех уровней сложности: легкий, средний или сложный. Предположим, у нас есть следующее:

Счет Сложный уровень
Менее 10 легкий
Между 10 и 20 Средняя
Больше 20 жесткий

Учитывая оценку сложности, вы можете получить уровень сложности с помощью тернарного оператора Python, как показано ниже:

 score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium

Выражение тернарного оператора в приведенном выше блоке кода имеет следующий вид:

 expression1 if condition1 else expression2 if condition2 else expression3

Несмотря на краткость, это немного сложно читать и анализировать. На следующем изображении показано, как в этом случае происходит поток управления.

тернарный-оператор-пример

В следующем фрагменте кода показана эквивалентная реализация с использованием операторов if-else. Как видно, поток управления намного проще для понимания, а код более читабелен.

 if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)

Поэтому, когда у вас есть несколько условий, вы должны использовать блоки if-else вместо тернарного оператора. Это гарантирует легкость чтения и понимания кода.

Кроме того, когда вам нужно выполнить несколько операторов — в зависимости от того, является ли условие истинным или ложным — вам следует рассмотреть возможность использования оператора if-else.

Заключение

Вот краткий обзор того, что вы узнали в этом уроке.

  • В Python тернарный оператор можно использовать со следующим синтаксисом: expression1 if condition else expression2 .
  • Вы можете эмулировать поведение тернарного оператора, используя кортежи и словари Python.
  • Хотя тернарный оператор может быть более лаконичной альтернативой блокам if-else, вы должны убедиться, что код читаем. Чтобы улучшить читаемость кода, вы можете использовать операторы if-else вместо тернарного оператора, особенно когда вам нужно связать несколько условий.

Затем ознакомьтесь с учебным пособием по операторам равенства и не равенства в Python.