Самый простой тройной оператор х если с остальными y состоит из трех операндов х , C и y Отказ Это выражение с возвращаемой стоимостью. Темнарный оператор возвращает х Если логическое выражение C оценивает Правда Отказ В противном случае, если выражение C оценивает Ложь Торговый оператор возвращает альтернативу y Отказ
Тройное (от латыни Ternarius ) – это прилагательное значение «Состоит из трех предметов» Отказ ( Источник ) Итак, буквально, Темнарный оператор в Python состоит из трех операндов. Во многих кругах Python The Ternary оператор также называется «Условное выражение» Поскольку он выполняет данное выражение только в том случае, если условие выполняется.
Синтаксис : Три операнда написаны как х если с остальными y который читает как «возвращение X Если C еще вернуть y ». Давайте написать это более интуитивно, как:
if else
| Возврат экспрессии оператора в случае, если условие оценивается к истинному | |
| Условие, которое определяет, нужно ли возвращать или ветку. | |
| Возврат экспрессии оператора в случае, если условие оценивает ложь |
Давайте посмотрим на минимальный пример в нашем интерактивном коде Shell:
Упражнение : Запустите код и введите свой возраст. Какой вывод? Запустите код еще раз и попробуйте изменить выход!
Давайте погрузимся в разные варианты тройного оператора в Python!
Питон Торговые примеры
Давайте краткий обзор нескольких примеров на разных методах использовать тройной оператор:
age = 17
# Method 1: Basic Ternary
print('wtf' if age<20 else 'What?')
'wtf'
# Method 2: Ternary Tuple
# (onFalse, onTrue) [condition]
print(('wtf', 'What?')[age<20])
'What?'
# Method 3: Ternary Dictionary
# Use Dictionary True/False values
print({True: 'wtf', False: 'What?'}[age<20])
'wtf'
# Method 4: Ternary Lambda
# Lambda function with 0 arguments
# Execute only one branch expression --> more efficient
print((lambda: 'wtf', lambda:'What?')[age<20]())
'What?'
Некоторые из них довольно запутаны, верно? Оставайтесь со мной на мгновение, потому что вы узнаете о каждом из них следующие! 🙂.
Базовый тройник
Самый простой тройной оператор х если с остальными y состоит из трех операндов х , C и y Отказ Это выражение с возвращаемой стоимостью.
- Темнарный оператор возвращает
хЕсли логическое выражениеCоцениваетПравдаОтказ - В противном случае, если выражение
CоцениваетЛожьТорговый оператор возвращает альтернативуyОтказ
Это позволяет назначать значения для переменной условной с помощью Ternary Operator. Вы также можете Печать Значения условно путем передачи базового тройного оператора в Печать () Функция:
age = 17
print('wtf' if age<20 else 'What?')
'wtf'Состояние C = возраст <20 оценивает Правда Отказ Таким образом, первая часть тройного оператора x = 'wtf' возвращается и передается в Печать () утверждение. С другой стороны, люди старше 20 лет, как правило, спрашивают 'Какие?' а не «WTF» Так что это будет выпуск Темнарного оператора.
Питон Тернарный кортеж
Снарядная форма тройного оператора является следующим синтаксис кортежей Отказ
Синтаксис : Вы можете использовать синтаксис кортежа (X, Y) [C] состоящий из кортежа (х, у) и состояние C заключенный в квадратный кронштейн. Вот более интуитивный способ представить этот синтаксис кортежа.
(, )[ ]
| Возврат экспрессии оператора в случае, если условие оценивается к истинному | |
| Условие, которое определяет, нужно ли возвращать или ветку. | |
| Возврат экспрессии оператора в случае, если условие оценивает ложь |
На самом деле, порядок и Операнды просто перевернуты по сравнению с основным тройным оператором. Во-первых, у вас есть ветвь, которая возвращается, если состояние не удерживается. Во-вторых, вы запускаете ветку, которая возвращается, если удерживается состояние.
age = 17
print(('wtf', 'What?')[age<20])
'What?'Состояние Возраст <20 Держит, поэтому возвращаемое значение передается в Печать () Функция – это филиал 'Какие?' Отказ Не волнуйтесь, если это смущает тебя – ты не одинок. Давайте уточним, почему этот синтаксис кортежа работает так, как он делает!
Во-первых, вы создаете кортеж («WTF», «Что?») Отказ Для доступа к первому значению кортежа «WTF» Вы бы использовали стандарт Индексирование синтаксис («WTF», «Что?») [0] Отказ Для доступа к второму значению кортежа 'Какие?' Вы бы использовали стандартный индексирующий синтаксис («WTF», «Что?») [1] Отказ
Во-вторых, вы создаете состояние Возраст <20 Отказ Вы используете это состояние как значение индексации. Вы в конечном итоге с («WTF», «Что?») [Ложь] или («WTF», «Что?») [Правда] Отказ Как вы можете знать, Логины Ложь и Правда представлены через целые числа 0 и 1 в питоне. Таким образом, вы получаете («WTF», «Что?») [0] и («WTF», «Что?») [1] , соответственно.
Другими словами : Если ваше состояние оценивает Ложь , вы получаете доступ к первому значению кортежа. Если ваше состояние оценивает Правда , вы получаете доступ к второму значению кортежа.
Python Ternary Словарь
Проблема : Учитывая Словарь и ключ. Можете ли вы использовать Ternary Operator для возврата ключа из словаря, но только если он существует, чтобы избежать ошибки ключей? Если ключ не существует, должна быть выполнена функция «падение».
Пример : Скажем, вы хотите сделать что-то вроде следующего (псевдокод):
var = dict["key"] if dict.has_key("key") else "fallback"Решение : Вы можете использовать The Terary Operator Dict [Key] Если ключ в Dict Else «Follack» Для достижения этого:
d = {'Alice': 17, 'Bob': 22}
key = 'Alice'
# Has key:
var = d[key] if key in d else -1
print(var)
# 17
# Doesn't have key:
key = 'Ann'
var = d[key] if key in d else -1
print(var)
# -1Торговый оператор возвращает значение, связанное с данным ключом, но только если ключ существует. Если оно не существует, он возвращает значение по умолчанию -1.
Однако более Питон способ достичь то же самое в более читаемо и больше Кратко способ использовать Словарь. Получить (ключ, по умолчанию) Функция:
d = {'Alice': 17, 'Bob': 22}
key = 'Alice'
# Has key:
var = d.get(key, -1)
print(var)
# 17
# Doesn't have key:
key = 'Ann'
var = d.get(key, -1)
print(var)
# -1Внешняя структура кода – это то же самое – но функция Get с значением по умолчанию -1 семантически заменяет более сложный тройной оператор.
Python Ternary лямбда
Вы также можете написать условные операторы в функции лямбда. Часто это приводит к более крашеному и читабельному способу достижения того же. Скажем, у вас есть следующий пример:
def f(x):
if x > 100:
x = 1.1*x
else:
x = 1.05*x
return x
print(f(100))
# 105.0Функция f (x) принимает один аргумент х И увеличивает его на 10%, если аргумент больше 100. В противном случае он увеличивает его на 5%. Как получается, вы также можете эффективно использовать оператор Темнарного оператора:
f = lambda x: 1.1*x if x>100 else 1.05*x print(f(100)) # 105.0
Результат такой же. Промежуточный к продвинутому кодеру Python не будет проблем с пониманием кода, и это гораздо более лаконично. Вот почему я бы предпочел этот путь за первый.
Python Ternary несколько строк
Что если у вас есть тройной оператор, это очень долго?
var = 'I want to learn Python' if 42**2<166 else 'I want to learn Go programming' print(var) # I want to learn Go programming
Проблема : Как написать Terary Operator в нескольких строках?
Решение : Вы можете продлить любой Логическая линия в Python над несколькими физическими линиями Используя скобки.
var = 'I want to learn Python' if 42**2<166 else 'I want to learn Go programming'
print(var)
var = ('I want to learn Python'
if 42**2<166 else
'I want to learn Go programming')
print(var)
# I want to learn Go programmingЭто Pep8 Стандартный способ разрушения длинных строк – если вы не можете сделать это более естественным образом (например, избегая тройного оператора и используя заявление, если в этом примере).
Python Ternary Elif.
К настоящему времени вы узнали, как писать оператор If-else в одной строке кода с использованием Ternary Operator. Но вы можете сделать то же самое с оператором ELIF, если у вас есть несколько условий?
Конечно вы можете! (Если вы сомневаетесь в том, можете ли вы сделать XYZ в одной строке Python, просто предположим, что вы можете. Проверьте мою новую книгу «Python One-Liners» для освоить единую строку кода!)
Скажем, вы хотите написать следующее условие, если в одном случае код:
>>> x = 42
>>> if x > 42:
>>> print("no")
>>> elif x == 42:
>>> print("yes")
>>> else:
>>> print("maybe")
yesЭлиф Филиал выигрывает: Вы печатаете вывод «Да» в оболочку. Но как сделать это в одной строке кода? Просто используйте Ternary Operator с оператором ELIF не будет работать (он бросит ошибку синтаксиса).
Ответ прост: гнездо двух тройных операторов, как так:
>>> print("no") if x > 42 else print("yes") if x == 42 else print("maybe")
yesЕсли значение x больше 42, мы печатаем «нет» в оболочку. В противном случае мы выполняем остаток кода (который является тройным оператором сама). Если значение x равно 42, мы печатаем «Да», иначе «возможно».
Поэтому, вложении нескольких тройных операторов, мы можем значительно увеличить наше Python One-Liner Power !
Попробуй сам:
Упражнение : Какой метод более лаконичен? Подсчитайте количество символов (или напишите небольшой сценарий, который делает это для вас;))!
Связанная статья : Python Ternary Elif.
Питон Терна вложено
В предыдущем примере вы видели, как семестный оператор Tемна семантически добавляет ветку ELIF. Теоретически, вы можете добавить произвольное количество ветвей ELIF, вложенные все больше и более тройных операторов:
# Method 1: If ... Elif ... Else
x = 42
if x > 42:
y = 1
elif x == 42:
y = 2
elif x == 12:
y = 3
else:
y = 4
print(y)
# 2
# Method 2: Nested Ternary Operator
y = 1 if x > 42 else 2 if x == 42 else 3 if x == 12 else 4
print(y)
# 2
Тем не менее, читабельность страдает плохо, и вы не должны ничего делать. Простой Mult-Line Если ... Элиф ... Элиф ... еще Заявление лучше!
ПИтона Травочная оценка Оценка
Проблема : Учитывая тройной оператор Х если с остальными y это возвращает выражение Х Если условие C . встречается и возвращает выражение Y иначе. Что такое порядок оценки этих выражений? Будет выражение Х Оценить, даже если условие C . это Ложь ?
Решение : Согласно Официальная документация Python : «Выражение x, если c царствуйте y сначала оценивают условие c, а не x. Если c rever true, x оценивается x, и его значение возвращается; в противном случае y оценивается, и его значение возвращается.
Таким образом, только соответствующее условие оценивается как можно увидеть в следующем примере кода:
print('X') if 5>3 else print('Y')
# XВы запускаете выражение Печать ('x') Если условие 5> 3 оценивает Правда (который он делает). Интересное наблюдение состоит в том, что выражение Печать ('y') не выполняется!
Python Ternary в понимании списка
Вы можете использовать оператор Ternary в качестве выражения части устройства понимания списка. Давайте быстро повторим список поставок:
Вместо использования унального выражения вы можете использовать тройное выражение:
print([x**2 if x%2 else x for x in range(5)]) # [0, 1, 2, 9, 4]
Вы используете тройную операцию x ** 2, если x% 2 else x Чтобы вернуть квадратный номер только за нечетные значения. Даженности остаются без изменений.
Python Terary Pep8 Pyphone
Оператор Python Ternary хороший стиль или плохой?
Торговый оператор хороший и питонический стиль, который удовлетворяет Pep8 Standard Отказ Некоторые невысказанные правила:
- Если ветвь IF должна быть наиболее вероятной.
- Не используйте вложенные рабочие операторы (используйте простые многострочные
Если ... Элиф ... тогда ...stepments вместо). - Не используйте длинные тройные операторы со сложными выражениями (снова используйте многострочные
если вместо этогозаявления).
Ternary Python не может назначить условное выражение
Если вы используете Ternary Operator в неправильном пути, он бросит синтаксисэррору:
Вы можете разрешить SyntaxError: не может назначить условное выражение, избегая использования оператора присвоения внутри вашего тройного оператора. Вместо этого назначите возвращаемое значение Ternary Operator для переменной, если вы должны:
a = 2 if 5>2 else 4 print(a) # 2
Теперь код не бросает еще одну ошибку.
Питон Тернар нет
Вы можете использовать любое возвращаемое значение в Ternary Operator – даже нет. Например, вы часто видите тройных операторов, которые на самом деле ничего не возвращают и просто выполняют определенную функцию без возвращаемого значения:
age = 20
# Ternary operator returns None
print('hi') if age<20 else print('hello')
# helloКонечно, это не очень чистый и читаемый код Python – лучшая альтернатива будет использовать простое, если утверждение:
# Better alternative:
if age<20:
print('hi')
else:
print('hello')Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Python One-Liners Книга
Python Programmemers улучшит свои навыки информатики с этими полезными одноклассниками.
Python One-listers научит вас читать и писать «одноклассники»: краткие заявления полезных функций, упакованных в одну строку кода. Вы узнаете, как систематически распаковать и понимать любую строку кода Python и писать красноречие, мощно сжатый Python, как эксперт.
Пять главных глав на пять глав обложки советы и трюки, регулярные выражения, машинное обучение, самые темы науки о данных и полезные алгоритмы. Подробные объяснения одноклассников вводят ключевые концепции компьютерных наук и повысить ваши кодировки и аналитические навыки. Вы узнаете о продвинутых функциях Python, такие как понимание списка, нарезки, нарезки, функции лямбда, регулярные выражения, карта и уменьшения функций и нарезки нарезки. Вы также узнаете, как:
• Используйте структуры данных для решения реальных проблем, такие как использование булевой индексации для поиска городов с загрязнением выше среднего • Используйте Numpy Basics, такие как массив, форма, ось, тип, вещание, расширенная индексация, нарезка, сортировка, поиск, агрегация и статистика • Рассчитайте базовую статистику многомерных массивов данных и алгоритмы K-означает для безоговорочного обучения • Создайте более усовершенствованные регулярные выражения с помощью группировки и названных групп, отрицательные LookAeads, сбежавшие символы, пробелы, наборы символов (и наборы отрицательных символов) и жадные/негридические операторы • Понимать широкий ассортимент темы компьютерных наук, включая анаграммы, палиндромы, сверты, перестановки, факториалы, простые числа, цифры фибоначчи, обфускации, поиск и алгоритмическую сортировку
К концу книги вы узнаете, как писать Python в его самых утонченных, и создавать краткие, красивые куски «Python Art» в простой строке.
Получите свой Python One-Liners сейчас !!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.