Документация по Python

Условия (ветвления if-elif-else) и тернарные операторы

В: Документация по Python

Введение

Примеры

If, Elif, и Else

В Python можно определить ряд условных , используя , if для первого, elif для отдыха, вплоть до окончательного (опционально) else для чего - нибудь не пойманного других условных.

 number = 5

if number > 2:
    print("Number is bigger than 2.")
elif number < 2:  # Optional clause (you can have multiple elifs)
    print("Number is smaller than 2.")
else:  # Optional clause (you can only have one else)
    print("Number is 2.")


 

Выходы Number is bigger than 2 , Number is bigger than 2

Использование else if , elif else if вместо elif вызовет синтаксическую ошибку и не допускается.

Условное выражение (или «Тернарный оператор»)

Тернарный оператор используется для встроенных условных выражений. Лучше всего использовать его в простых, кратких операциях, которые легко читаются.

  • Порядок аргументов отличается от многих других языков (таких как C, Ruby, Java и т. Д.), Что может привести к ошибкам, когда люди, незнакомые с «удивительным» поведением Python, используют его (они могут изменить порядок).
  • Некоторые считают его «громоздким», поскольку он идет вразрез с нормальным потоком мысли (сначала думая о состоянии, а затем о последствиях).
 n = 5

"Greater than 2" if n > 2 else "Smaller than or equal to 2"
# Out: 'Greater than 2'

 

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

Тенарные операции также могут быть вложенными, как здесь:

 n = 5
"Hello" if n > 10 else "Goodbye" if n > 5 else "Good day"

 

Они также обеспечивают способ включения условных в функции лямбды .

Если заявление

 if condition:
    body

 

В if заявления проверяет состояние. Если он имеет значение True , она выполняет тело , if заявление. Если он имеет значение False , он пропускает тело.

 if True:
    print "It is true!"
>> It is true!

if False:
    print "This won't get printed.."

 

Условием может быть любое допустимое выражение:

 if 2 + 2 == 4:
    print "I know math!"
>> I know math! 

Остальное заявление

 if condition:
    body
else:
    body

 

Оператор else будет выполнять свое тело только в том случае, если все предыдущие условные операторы будут иметь значение False.

 if True:
    print "It is true!"
else:
    print "This won't get printed.."

# Output: It is true!

if False:
    print "This won't get printed.."
else:
    print "It is false!"

# Output: It is false! 

Логические выражения

Булевы логические выражения, в дополнение к оценке в True или False , возвращает значение , которое было истолковано как True или False . Это Pythonic способ представить логику, которая в противном случае может потребовать теста if-else.

И оператор

and оператор вычисляет все выражения и возвращает последнее выражение , если все вычисления выражений True . В противном случае она возвращает первое значение , которое вычисляется значение False :

 >>> 1 and 2
2

>>> 1 and 0
0

>>> 1 and "Hello World"
"Hello World"

>>> "" and "Pancakes"
""


 

Или оператор

or оператор вычисляет выражения слева направо и возвращает первое значение , которое вычисляет True или последнее значение (если ни один не True ).

 >>> 1 or 2
1

>>> None or 1
1

>>> 0 or []
[]


 

Ленивая оценка

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

 >>> def print_me():
        print('I am here!')
>>> 0 and print_me()
0

 

В приведенном выше примере, print_me никогда не выполняются , потому что Python может определить все выражение False , когда он встречает 0 ( False ). Имейте это в виду , если print_me нужно выполнить , чтобы служить вашей логике программы.

Тестирование на множественные условия

Распространенной ошибкой при проверке нескольких условий является неправильное применение логики.

Этот пример пытается проверить , если две переменные имеют больше 2. Заявление оценивается как - if (a) and (b > 2) . Это дает неожиданный результат , так как bool(a) вычисляется как True , когда не равен нулю. a

 >>> a = 1
>>> b = 6
>>> if a and b > 2:
...     print('yes')
... else:
...     print('no')

yes

 

Каждую переменную нужно сравнивать отдельно.

 >>> if a > 2 and b > 2:
...     print('yes')
... else:
...     print('no')

no


 

Другая, аналогичная ошибка допущена при проверке, является ли переменная одним из нескольких значений. Утверждение в этом примере оценивается как - if (a == 3) or (4) or (6) . Это дает неожиданный результат , так как bool(4) и bool(6) каждый вычисляться значение True

 >>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')

yes


 

Опять каждое сравнение должно быть сделано отдельно

 >>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')

no

 

Использование оператора in является каноническим способом написать это.

 >>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')

no 

Истинные ценности

Следующие значения считаются falsey, в том , что они оценивают в False при применении к логическому оператору.

  • Никто
  • Ложь
  • 0 , или любое цифровое значение эквивалентно нулю, например , 0L , 0.0 , 0j
  • Пустые последовательности: '' , "" , () , []
  • Пустые отображения: {}
  • Определяемые пользователем типы где __bool__ или __len__ возвращающие методы 0 или False

Все остальные значения в Python вычисляться True .

Примечание: Распространенная ошибка является просто проверить на фальшивость операции , которая возвращает различные значения Falsey где разница имеет значение. Например, при использовании , if foo() , а не более явным , if foo() is None

Использование функции cmp для получения результата сравнения двух объектов

Python 2 включает в себя cmp функцию , которая позволяет определить , является ли один объект меньше, равен или больше другого объекта. Эта функция может быть использована для выбора из списка на основе одного из этих трех вариантов.

Предположим , вам нужно напечатать 'greater than' , если x > y , 'less than' , если x < y и 'equal' , если x == y .

 ['equal', 'greater than', 'less than', ][cmp(x,y)]

# x,y = 1,1 output: 'equal'
# x,y = 1,2 output: 'less than'
# x,y = 2,1 output: 'greater than'

 

cmp(x,y) возвращает следующие значения

сравнение  Результат  х <у  -1  х == у  0  х> у  1

Эта функция удалена на Python 3. Вы можете использовать cmp_to_key(func) вспомогательные функции , расположенные в functools в Python 3 , чтобы преобразовать старые функции сравнения ключевых функций.

Тестирование объекта на None и присвоение ему

Вы часто хотите назначить что - то объект , если он не является None , указав , что он не был назначен. Мы будем использовать aDate .

Самый простой способ сделать это состоит в использовании is None тест.

 if aDate is None:
    aDate=datetime.date.today()

 

(Обратите внимание , что это не более Pythonic сказать is None вместо == None ) .

Но это может быть немного оптимизирована за счет использования понятия , что not None не оценит , чтобы True в логическое выражение. Следующий код эквивалентен:

 if not aDate:
    aDate=datetime.date.today()

 

Но есть и более питонский способ. Следующий код также эквивалентен:

 aDate=aDate or datetime.date.today()

 

Это делает оценку короткого замыкания . Если aDate инициализируется и не является not None , то он получает назначение в себе, без чистого эффекта. Если это is None , то datetime.date.today() получает назначение в aDate .

Синтаксис

Параметры

Примечания

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.