Введение
Примеры
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
.