okpython.net
Все для начинающих

Типы bool и NoneType в Python

Тип bool в Python

В Python, как и в других языках программирования, тип данных bool (т.е. логический тип данных) выражает истинность или ложность и состоит, соответст­венно, всего из двух предопределенных объектов True и False. Логические константы обычно являются результатом операций сравнения, особенно в выражениях управляющих конструкций, где они определяют ход дальнейших действий программы (см. пример №1).

Код Результат pythonCodes
# Сравним дроби.
n_1 = 155/247
n_2 = 189/289

# Если рез-том сравнения будет True.
if (n_1 > n_2) == True:
    print('155/247 > 189/289')	
# Если рез-т не равен False.
elif (n_1 == n_2) != False:
    print('155/247 = 189/289')		
# Иначе.
else:
    print('155/247 < 189/289')
155/247 < 189/289










		
			

Пример №1. Логический тип данных в Python (часть 1).

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

Стоит добавить, что True и False по сути являются обычными целыми числами 1 и 0, пусть и с некоторыми особенностями отображения на экране (см. пример №2).

Код Результат pythonCodes
# Вычислим и выведем рез-ты выражений.
res_1 = 1 + 2 + 3*0
# Получим 3. 
print('1 + 2 + 3*0 =', res_1)	
res_2 = True + 2 + 3*False
# Также получим 3.
print('True + 2 + 3*False =', res_2, end='\n\n')	

# Сравним числа и константы.
res_3 = (1 == True)
# Получим True.
print('(1 == True) ->', res_3)				
res_4 = (0 == False)
# Также получим True.
print('(0 == False) ->', res_4, end='\n\n')		

# Но тип выделен отдельно.
print('type(1) ->', type(1))
print('type(True) ->', type(True), end='\n\n')				

print('type(0) ->', type(0))			
print('type(False) ->', type(False))
1 + 2 + 3*0 = 3
True + 2 + 3*False = 3

(1 == True) -> True
(0 == False) -> True

type(1) -> <class 'int'>
type(True) -> <class 'bool'>

type(0) -> <class 'int'>
type(False) -> <class 'bool'>









		
			

Пример №2. Логический тип данных в Python (часть 2).

Как видим, булевы константы действительно можно использовать в математических выражениях на равных с числами. Точно также и в операциях сравнения можно использовать вместо констант True и False числа 1 и 0 (попробуйте заменить константы числами в первом примере). Поэтому для себя их можно считать просто именованными «ноликами» и «единичками» не забывая при этом, что мы имеем дело с отдельным типом данных.

Логические операторы в Python

Python поддерживает следующие стандартные логические операторы: and (логическое И), or (логическое ИЛИ), not (логическое НЕ). Все они используются в логических выражениях для определения того или иного хода выполнения программы в зависимости от возвращаемого выражением результата (см. таблицу №3).

Пример Название Результат
not x Логическое НЕ True, если значение x равно False.
x and y Логическое И True, если оба значения x и y равны True.
x or y Логическое ИЛИ True, если оба значения равны True или хотя бы одно из значений x или y равно True.

Таблица №3. Логические операторы Python.

Важно понимать, как интерпретатор обрабатывает логические выражения в общем случае. Согласно документации, если в выражении x or y результат вычисления операнда x будет интерпретироваться как True или в выражении x and y результат вычисления этого операнда будет интерпретироваться как False, то правый операнд, т.е. операнд y, уже вычисляться не будет. Вместо этого будет просто возвращен результат вычисления левого операнда x. В противном случае, когда в выражении x or y результат вычисления левого операнда будет интерпретироваться как False или в выражении x and y результат вычисления этого операнда будет интерпретироваться как True, интерпретатор вернет результат вычисления правого операнда, т.е. операнда y. Именно поэтому инструкции print(5 or 0) и print(0 or 5) выведут '5', а print(0 and 5) и print(5 and 0), выведут '0'.

Следует быть внимательным и не помещать в правый операнд код, от которого может зависеть правильная работа программы (см. пример №4).

Код Результат pythonCodes
# Создаем пустой список.
li = []

# Определяем польз. функцию.
def my_func(x):
    li.append(x)
              
# Просим вычислить выражение.
True or my_func(5)
# Выведет [], т.к. my_func не вызывалась.
print(li)
          
# Просим вычислить выражение.
False or my_func(5)
# Выведет [5], т.к. вызов my_func(5) был.
print(li) 
[]
[5]












		
			

Пример №4. Особенности использования логических операторов.

Тип NoneType в Python

Специальная константа None, означающая отсутствие значения, является в Python единственным представителем типа данных NoneType. Обычно ее используют для инициализации переменных и объектов, которым значения потребуется присвоить позже. Кроме того, None неявно возвращается функциями, у которых отсутствует оператор return (см. пример №5).

Код Результат pythonCodes
# Инициализируем переменную.
n = None
		
# Напишем функцию.
def my_func(n):
	# Выведет NoneType.
	print('type(n) ->', type(n))	

# Вызываем ф-цию, а рез-т вызова сохраняем. 
res = my_func(n)

# None, т.к. оператор return в ф-ции отсутствует.
print('my_func(n) ->', res)
type(n) -> <class 'NoneType'>
my_func(n) -> None









		
			

Пример №5. Тип NoneType в Python.

Опять же, как и в случае с логическими константами, имя None чуствительно к регистру символов, поэтому использовать его нужно именно в указанном здесь виде.

Что касается проверки переменной на значение None, то сделать это надежнее всего при помощи известного нам оператора is. Например, для инструкции n = None проверка n is None вернет True.

Вопросы и задания для самоконтроля

1. Выберите верные варианты написания имен: NONE, True, false, None, true, False. Объясните свой ответ. Показать решение.

Ответ. В Питоне имена переменных и констант регистрозависимы и должны использо­ваться в следующем виде: True, False, None.

2. Установите соответствия между константами None, True, False и утверж­де­ниями «Истина», «Ложь», «Нет значения». Показать решение.

Ответ. True ⇨ «Истина», False ⇨ «Ложь», None ⇨ «Нет значения».

3. Посчитайте устно, а затем проверьте себя программно: 3 + False, True*5 + False, 7 - False*5. Показать решение.

Решение Результат pythonCodes
# Вычислим и выведем рез-ты выражений.
res_1 = 3 + False
print('3 + False =', res_1, end='\n\n')	
res_2 = True*5 + False
print('True*5 + False =', res_2, end='\n\n')	
res_3 = 7 - False*5
print('7 - False*5 =', res_3)
3 + False = 3

True*5 + False = 5

7 - False*5 = 7

			

4. Какой результат вернут выражения: 5 < 7, 5 > 7, 5 <= 7. Показать решение.

Ответ. 5 < 7True, 5 > 7False, 5 <= 7True.

5. Будет ли осуществлен вызов функций в следующих примерах: False and foo(), not True or foo(), 1 and foo()? Показать решение.

Ответ. Вызов функций будет осуществлен во втором и третьем примерах, т.к. после обработки левой части условий конечный результат вычислений еще будет неопределенным. В ответе мы учли, что во втором примере not True == False, а в третьем примере 1 == True.

6. Укажите верный результат выполнения кода print(10 and 20): 10 and 20, 10, 20, 1, True. Показать решение.

Ответ. Верным ответом будет 20, т.к. согласно документации в ходе вычисления выражения x and y интерпретатор сперва вычисляет левый операнд x, возвращая результат вычислений, если он интерпретируется как False. Если же результат будет интерпретироваться как True, интерпретатор вернет результат вычисления правого операнда y. Например, print(10*0 and 20) выведет 0, print([] and 20) выведет [], print(False and 20) выведет False, print(True and 20) выведет 20, print([10*0] and 20) выведет 20, print([10*5] and 20*3) выведет 60.

7. Дополнительные тесты по теме расположены в разделе «Логический тип» нашего сборника тестов.

8. Дополнительные упражнения и задачи по теме расположены в разделе «Логические выражения» нашего сборника задач и упражнений.

Быстрый переход к другим страницам