Ключевые слова Python нельзя использовать как имена переменных, функций и классов. Они управляют синтаксисом языка: условиями, циклами, функциями, классами, импортом, ошибками и асинхронным кодом
Проверить актуальный список для своей версии Python можно так
import keyword
print(keyword.kwlist)
print(keyword.softkwlist)
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Логика и условия
| Слово | Для чего нужно |
|---|---|
if | условие |
elif | дополнительное условие |
else | ветка по умолчанию |
and | оба условия истинны |
or | хотя бы одно условие истинно |
not | отрицание |
is | сравнение идентичности |
in | проверка вхождения |
True | истина |
False | ложь |
None | отсутствие значения |
value = None
if value is None:
print("значения нет")
Циклы
| Слово | Для чего нужно |
|---|---|
for | цикл по коллекции |
while | цикл по условию |
break | остановить цикл |
continue | перейти к следующему шагу |
for number in range(1, 4):
if number == 2:
continue
print(number)
Функции и классы
| Слово | Для чего нужно |
|---|---|
def | объявить функцию |
return | вернуть результат |
lambda | короткая анонимная функция |
yield | вернуть значение из генератора |
class | объявить класс |
pass | пустой блок |
def double(number):
return number * 2
print(double(5))
Ошибки и контекст
| Слово | Для чего нужно |
|---|---|
try | выполнить рискованный код |
except | обработать ошибку |
finally | выполнить блок в конце |
raise | вызвать ошибку |
assert | проверить предположение |
with | открыть контекст |
as | дать имя внутри контекста или импорта |
try:
value = int("42")
except ValueError:
value = 0
print(value)
Импорт и область видимости
| Слово | Для чего нужно |
|---|---|
import | подключить модуль |
from | импортировать из модуля |
global | обратиться к глобальному имени |
nonlocal | обратиться к имени из внешней функции |
del | удалить имя или элемент |
from pathlib import Path
print(Path.cwd())
Асинхронность
| Слово | Для чего нужно |
|---|---|
async | объявить асинхронную функцию |
await | дождаться результата |
Эти слова нужны в асинхронном коде: сетевые запросы, боты, серверы, параллельное ожидание операций
Soft keywords
match, case и _ могут иметь специальный смысл в сопоставлении с образцом, но не всегда ведут себя как обычные зарезервированные слова
status = "ready"
match status:
case "ready":
print("готово")
case _:
print("другой статус")
Ключевые слова и встроенные имена
list, dict, str, sum, type, id не являются ключевыми словами, но это встроенные имена. Их лучше не использовать как переменные
items = [1, 2, 3]
print(sum(items))
Плохой вариант
sum = 10
Так код перекрывает встроенную функцию sum
Проверка имени переменной
import keyword
names = ["class", "user_name", "for", "total"]
for name in names:
print(name, keyword.iskeyword(name))
Почему ключевые слова нельзя учить списком
Ключевые слова Python лучше группировать по смыслу. Тогда становится понятно, где они появляются в коде и почему их нельзя использовать как имена переменных
| Группа | Слова | Где встречаются |
|---|---|---|
| условия | if, elif, else, match, case | выбор ветки |
| циклы | for, while, break, continue | повторение действий |
| функции | def, return, lambda, yield | создание поведения |
| классы | class, self не keyword | описание объектов |
| ошибки | try, except, finally, raise, assert | обработка проблем |
| импорт | import, from, as | подключение модулей |
| логика | and, or, not, is, in | условия и сравнения |
| контекст | with | безопасная работа с ресурсами |
import keyword
print(keyword.kwlist)
print(keyword.iskeyword("class"))
print(keyword.iskeyword("username"))
Как keyword ломает переменную
Если назвать переменную ключевым словом, Python не сможет понять код
# так нельзя
# class = "Python"
class_name = "Python"
print(class_name)
Похожая проблема бывает со встроенными именами. list, dict, str, sum не являются ключевыми словами, но использовать их как переменные все равно плохая идея
items = [1, 2, 3]
total = sum(items)
print(total)
Где встречаются редкие слова
yield нужен для генераторов, global и nonlocal меняют область видимости, async и await используются в асинхронном коде. Новичку не обязательно сразу применять их в проектах, но полезно узнавать их при чтении чужого кода
def numbers():
yield 1
yield 2
for number in numbers():
print(number)
Самопроверка
Возьмите любое имя переменной и проверьте его через keyword.iskeyword(). Потом проверьте, не совпадает ли оно с популярными встроенными именами: list, dict, str, int, sum, max, min, input, print