Ключові слова — це зарезервовані слова в Python. Ми не можемо використовувати ключове слово як ім’я змінної, ім’я функції або будь-який інший ідентифікатор.
Ось список всіх ключових слів в Python:
| Ключові слова в Python | ||||
| False | await | else | import | pass |
| True | break | except | in | raise |
| None | class | finally | is | return |
| and | continue | for | lambda | try |
| as | def | from | nonlocal | while |
| assert | del | global | not | with |
| async | elif | if | or | yield |
Деякі ключові слова можуть відрізнятися у різних версіях Python. Деякі можуть бути додані, а деякі можуть бути вилучені. Ми завжди можемо отримати список усіх ключових слів поточної версії Python, ввівши наступну команду:
|
1 2 3 4 |
>>> import keyword >>> print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] |
Ключові слова True та False
True та False — це логічні значення в Python. Вони є результатами операцій порівняння чи логічних (булевих) операцій. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> 1 == 1 True >>> 5 > 3 True >>> True or False True >>> 10 <= 1 False >>> 3 > 7 False >>> True and False False |
Тут ми можемо бачити, що перші три стейтменти є істинними, тому інтерпретатор повертає True, а решта трьох стейтментів є хибними, тому інтерпретатор повертає False. True та False в Python — це те саме, що 1 та 0. Це можна підтвердити наступним прикладом:
|
1 2 3 4 5 6 |
>>> True == 1 True >>> False == 0 True >>> True + True 2 |
Ключове слово None
None — це спеціальна константа в Python, яка представляє відсутність значення або нульове значення. Це об’єкт типу NoneType. Ми не можемо створити кілька об’єктів None, але можемо присвоїти їх змінним. Ці змінні будуть рівні між собою.
Зверніть увагу, що None не має на увазі значення False, 0 або порожній список, словник, рядок тощо. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 |
>>> None == 0 False >>> None == [] False >>> None == False False >>> x = None >>> y = None >>> x == y True |
Функції, які нічого не повертають, автоматично повертають об’єкт None. Також функції, які не знаходять наприкінці оператора return, повертають None. Наприклад:
|
1 2 3 4 5 6 7 |
def a_void_function(): a = 1 b = 2 c = a + b x = a_void_function() print(x) |
Результат:
None
У вищенаведеній програмі є функція, яка не повертає значення, хоча всередині виконує певні операції. Тому, коли ми виводимо x, ми отримуємо None, який повертається автоматично (неявно). Аналогічно, ось ще один приклад:
|
1 2 3 4 5 6 |
def improper_return_function(a): if (a % 2) == 0: return True x = improper_return_function(3) print(x) |
Результат:
None
Хоча ця функція має оператор return, він спрацьовує не в кожному випадку. Функція повертає True лише в тому випадку, якщо вхідне число парне. Якщо ми передаємо у функцію непарне число, то повертається None.
Ключові слова and, or та not
and, or та not — це логічні оператори в Python. Оператор and повертає значення True, лише якщо обидва операнди мають значення True. Таблиця істинності для оператора and наведена нижче:
| Таблиця істинності для and | ||
| A | B | A and B |
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
Оператор or повертає значення True, якщо хоча б один з операндів має значення True. Таблиця істинності для оператора or наведена нижче:
| Таблиця істинності для or | ||
| A | B | A or B |
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
Оператор not використовується для інвертування вихідного значення. Таблиця істинності для оператора not наведена нижче:
| Таблиця істинності для not | ||
| A | not A | |
| True | False | |
| False | True | |
Приклади використання операторів and, or та not в Python:
|
1 2 3 4 5 6 |
>>> True and False False >>> True or False True >>> not False True |
Ключове слово as
Оператор as використовується для створення псевдоніма при імпорті модуля. Це означає, що при імпорті модуля йому присвоюється інше ім’я (визначене користувачем).
Наприклад, в Python є стандартний модуль math. Припустимо, ми хочемо обчислити косинус числа Пі, використовуючи псевдонім. Ми можемо зробити це в наступний спосіб, використовуючи as:
|
1 2 3 |
>>> import math as myAlias >>> myAlias.cos(myAlias.pi) -1.0 |
Тут ми імпортували модуль math, надавши йому ім’я myAlias. Тепер ми можемо звертатися до модуля math за цим іменем. Використовуючи це ім’я, ми вирахували cos(pi) та отримали в якості результату -1.0.
Ключове слово assert
Оператор assert використовується в процесі відлагодження. Під час написання коду нам іноді може знадобитися дізнатися внутрішній стан або перевірити, чи правильні наші припущення. assert допомагає зробити це, а також допомагає знайти помилки. За assert слідує умова.
Якщо умова дорівнює True, тоді нічого не відбувається. Але якщо умова дорівнює False, тоді генерується виняток AssertionError. Наприклад:
|
1 2 3 4 5 6 |
>>> a = 4 >>> assert a < 5 >>> assert a > 5 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError |
Для кращого розуміння ми можемо вказати повідомлення, яке буде виведено разом із AssertionError:
|
1 2 3 4 5 |
>>> a = 4 >>> assert a > 5, "The value of a is too small" Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError: The value of a is too small |
На цьому етапі ми можемо зазначити, що:
|
1 |
assert умова, повідомлення |
еквівалентно:
|
1 2 |
if not умова: raise AssertionError(повідомлення) |
Ключові слова async та await
Ключові слова async та await надаються бібліотекою asyncio в Python. Вони використовуються для написання паралельного коду в Python. Наприклад:
|
1 2 3 4 5 6 7 8 |
import asyncio async def main(): print('Hello') await asyncio.sleep(1) print('world') asyncio.run(main()) |
Результат:
Hello
world
Для запуску програми ми використаємо наступний стейтмент:
|
1 |
asyncio.run(main()) |
Тут ключове слово async вказує, що функція буде виконуватися асинхронно. Спочатку виводиться Hello. Ключове слово await змушує програму чекати 1 секунду. І потім виводиться world.
Ключові слова break та continue
Оператори break та continue використовуються всередині циклів for та while для зміни їхньої звичайної поведінки.
Оператор break завершує цикл, в якому він знаходиться, і керування переходить до стейтмента, розташованого безпосередньо після циклу. Оператор continue призводить до завершення поточної ітерації циклу, але не всього циклу.
Розглянемо приклад використання оператора break:
|
1 2 3 4 |
for i in range(1,11): if i == 5: break print(i) |
Результат:
1
2
3
4
Тут цикл for має намір вивести числа від 1 до 10. Але коли значення i дорівнює 5, спрацьовує умова if і виконується оператор break. Таким чином, виводяться числа від 1 до 4.
Розглянемо приклад використання оператора continue:
|
1 2 3 4 |
for i in range(1,11): if i == 5: continue print(i) |
Результат:
1
2
3
4
6
7
8
9
10
Та сама програма, тільки замість break використовуємо continue. Коли виконується умова if, спрацьовує оператор continue — ми не виходимо з циклу, а лише припиняємо поточну ітерацію циклу, і переходимо до наступної. Отже, виводяться всі значення, крім 5.
Ключове слово class
Ключове слово class використовується для визначення нового користувацького класу в Python.
Клас — це набір пов’язаних атрибутів та методів. Ідея об’єднання даних та функцій у класі займає центральне місце в концепції об’єктно-орієнтованого програмування (скор. “OOP” від англ. “Object Oriented Programming”).
Класи можуть бути визначені в будь-якому місці програми. Але хорошою практикою є визначення одного класу у модулі.
|
1 2 3 4 5 |
class ExampleClass: def function1(параметри): … def function2(параметри): … |
Ключове слово def
Ключове слово def використовується для визначення користувацької функції.
Функція — це блок пов’язаних стейтментів, які разом виконують певне завдання. Це допомагає організувати код у керовані фрагменти, а також виконувати певні повторювані завдання.
|
1 2 |
def function_name(параметри): … |
Ключове слово del
Оператор del використовується для видалення посилання на об’єкт. В Python все є об’єктом. Ми можемо видалити посилання на змінну за допомогою del:
|
1 2 3 4 5 6 7 8 |
>>> a = b = 5 >>> del a >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>> b 5 |
Тут ми можемо бачити, що посилання на змінну a було видалено. Але змінна b, як і раніше, існує.
Оператор del також використовується для видалення елементів зі списку або словника:
|
1 2 3 4 |
>>> a = ['x','y','z'] >>> del a[1] >>> a ['x', 'z'] |
Ключові слова if, else та elif
Оператори if, else та elif використовуються для умовного розгалуження або прийняття рішень.
Коли ми хочемо перевірити певну умову і виконати блок, якщо умова дорівнює True, ми використовуємо if та elif. elif — це скорочення від else if. Блок else виконується, якщо умова дорівнює False. Це буде зрозуміло в наступному прикладі:
|
1 2 3 4 5 6 7 8 9 10 11 |
def if_example(a): if a == 1: print('One') elif a == 2: print('Two') else: print('Something else') if_example(2) if_example(4) if_example(1) |
Результат:
Two
Something else
One
Тут функція перевіряє введене число і виводить результат, якщо воно дорівнює 1 або 2. Будь-який ввід, відмінний від цього, призведе до виконання блоку else.
Ключові слова except, raise та try
Ключові слова except, raise та try використовуються з винятками в Python.
Винятки — це насправді помилки, які вказують на те, що під час виконання нашої програми щось пішло не так. IOError, ValueError, ZeroDivisionError, ImportError, NameError, TypeError тощо — ось кілька прикладів винятків в Python. Блоки try...except використовуються для перехоплення винятків в Python.
Ми можемо явно згенерувати виняток за допомогою ключового слова raise. Нижче наведено приклад:
|
1 2 3 4 5 6 7 8 9 10 |
def reciprocal(num): try: r = 1/num except: print('Exception caught') return return r print(reciprocal(10)) print(reciprocal(0)) |
Результат:
0.1
Exception caught
None
Тут функція reciprocal() повертає обернену величину введеного числа. Коли ми вводимо 10, ми отримуємо результат 0.1. Але коли ми вводимо 0, автоматично генерується помилка ZeroDivisionError.
Це перехоплюється нашим блоком try…except і повертається None. Ми також могли б явно згенерувати ZeroDivisionError, перевіривши ввід, та обробити його в іншому місці наступним чином:
|
1 2 |
if num == 0: raise ZeroDivisionError('cannot divide') |
Ключове слово finally
Блок finally використовується з блоком try…except. Використання finally гарантує, що код всередині нього буде виконано, навіть якщо є необроблений виняток. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 |
try: Блок try except виняток1: Блок виняток1 except виняток2: Блок виняток2 else: Блок else finally: Блок finally |
Тут, якщо генерується виняток у блоці try, то він обробляється в блоці except або в блоці else. Але незалежно від того, в якому порядку відбувається виконання, ми можемо бути впевнені, що блок finally буде виконано, навіть якщо виникне помилка. Це корисно при очищенні пам’яті.
Ключове слово for
Ключове слово for використовується для створення циклу, коли ми знаємо наперед кількість необхідних ітерацій (повторів) циклу.
В Python ми можемо використовувати цикл for з послідовностями будь-якого типу, наприклад, зі списком або рядком. Нижче наведено приклад, у якому використовується цикл for для перебору списку імен:
|
1 2 3 |
names = ['John','Monica','Steven','Robin'] for i in names: print('Hello '+i) |
Результат:
Hello John
Hello Monica
Hello Steven
Hello Robin
Ключові слова from та import
Ключове слово import використовується для імпорту модулів у поточний простір імен. Стейтмент from…import використовується для імпорту певних атрибутів або функцій у поточний простір імен. Наприклад:
|
1 |
import math |
Тут стейтмент import імпортує модуль math. Тепер ми можемо використати функцію cos() з даного модуля як math.cos(). Але якщо ми хочемо імпортувати тільки функцію cos(), це можна зробити, використовуючи from наступним чином:
|
1 |
from math import cos |
Тепер ми можемо використовувати функцію просто як cos(), не потрібно писати math.cos().
Ключове слово global
Ключове слово global використовується для оголошення глобальних змінних. Якщо потрібно змінити значення глобальної змінної всередині функції, ми повинні оголосити її як global. В іншому випадку створиться локальна змінна з таким же ім’ям.
Наступний приклад допоможе це прояснити:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
globvar = 10 def read1(): print(globvar) def write1(): global globvar globvar = 5 def write2(): globvar = 15 read1() write1() read1() write2() read1() |
Результат:
10
5
5
Тут функція read1() просто зчитує значення змінної globvar. Тому нам не потрібно її оголошувати як global. Але функція write1() змінює значення, тому нам потрібно оголосити змінну як global.
У нашому виводі бачимо, що зміна дійсно відбулася (10 змінено на 5). Функція write2() також намагається змінити це значення, але ми не оголосили всередині цієї функції змінну як global.
Отже, створюється нова локальна змінна globvar, яку не видно за межами цієї функції. Хоча ми змінюємо цю локальну змінну на 15, глобальна змінна залишається незмінною. Це добре видно у нашому результаті.
Ключове слово in
Оператор in використовується для перевірки того, чи містить послідовність (список, кортеж, рядок тощо) певне значення. Він повертає True, якщо значення є, в протилежному випадку — повертає False. Наприклад:
|
1 2 3 4 5 |
>>> a = [1, 2, 3, 4, 5] >>> 5 in a True >>> 10 in a False |
Інше використання оператора in — це переміщення по послідовності циклу for:
|
1 2 |
for i in 'hello': print(i) |
Результат:
Ключове слово is
Оператор is використовується в Python для перевірки ідентичності об’єкта. У той час як оператор == використовується для перевірки рівності або нерівності двох змінних, is використовується для перевірки того, чи посилаються дві змінні на той самий об’єкт чи ні.
Він повертає True, якщо об’єкти ідентичні та False, якщо ні. Перший приклад:
|
1 2 3 4 5 6 |
>>> True is True True >>> False is False True >>> None is None True |
Ми знаємо, що існує тільки один екземпляр True, False та None, тому вони ідентичні.
Другий приклад:
|
1 2 3 4 5 6 7 8 |
>>> [] == [] True >>> [] is [] False >>> {} == {} True >>> {} is {} False |
Порожній список або словник дорівнює іншому порожньому списку або словнику. Але це не ідентичні об’єкти, оскільки вони розташовані окремо у пам’яті. Це тому, що список та словник змінюються (їх елементи можуть бути змінені).
Третій приклад:
|
1 2 3 4 5 6 7 8 |
>>> '' == '' True >>> '' is '' True >>> () == () True >>> () is () True |
На відміну від списку та словника, рядок та кортеж незмінні (значення елементів не можуть бути змінені після визначення). Отже, два однакові рядки чи кортежі ідентичні. Вони посилаються на одну й ту ж область пам’яті.
Ключове слово lambda
Ключове слово lambda використовується для створення анонімної функції (функція без імені). Це вбудована функція, яка не містить оператор return. Вона складається з виразу, який обчислюється та повертається. Наприклад:
|
1 2 3 |
a = lambda x: x*2 for i in range(1,6): print(a(i)) |
Результат:
2
4
6
8
10
Тут ми створили вбудовану функцію, яка подвоює значення за допомогою оператора lambda. Ми використали цей оператор для подвоєння значень в діапазоні від 1 до 5.
Ключове слово nonlocal
Використання ключового слова nonlocal дуже схоже на ключове слово global. nonlocal використовується для оголошення того, що змінна всередині вкладеної функції (функція всередині функції) не є локальною для неї, тобто вона знаходиться у зовнішній вкладеній функції. Якщо потрібно змінити значення нелокальної змінної всередині вкладеної функції, ми повинні оголосити її за допомогою nonlocal. В іншому випадку всередині вкладеної функції буде створено локальну змінну з таким же ім’ям.
Наступний приклад допоможе це прояснити:
|
1 2 3 4 5 6 7 8 9 10 |
def outer_function(): a = 5 def inner_function(): nonlocal a a = 10 print("Inner function: ",a) inner_function() print("Outer function: ",a) outer_function() |
Результат:
Inner function: 10
Outer function: 10
Тут функція inner_function() вкладена у функцію outer_function(). Змінна a знаходиться в outer_function(). Якщо ми хочемо змінити її в inner_function(), ми повинні оголосити її як nonlocal. Зверніть увагу, що a не є глобальною змінною. Тому, бачимо у виводі, що змінна була успішно змінена всередині вкладеної функції inner_function().
А тепер програма без використання ключового слова nonlocal:
|
1 2 3 4 5 6 7 8 9 |
def outer_function(): a = 5 def inner_function(): a = 10 print("Inner function: ",a) inner_function() print("Outer function: ",a) outer_function() |
Результат:
Inner function: 10
Outer function: 5
Тут ми не оголошуємо, що змінна a всередині вкладеної функції є nonlocal. Отже, створюється нова локальна змінна з тим самим ім’ям, але нелокальна змінна a не змінюється, що видно з результату.
Ключове слово pass
Ключове слово pass — це нульовий оператор в Python. При його виконанні нічого не відбувається. Він використовується як заповнювач.
Припустимо, ми маємо функцію, яка ще не визначена, але ми хочемо визначити її в майбутньому. Якщо ми просто напишемо у програмі:
|
1 |
def function(args): |
То отримаємо помилку IndentationError. Натомість ми можемо створити порожнє тіло функції за допомогою оператора pass:
|
1 2 |
def function(args): pass |
Те саме можна зробити із класом:
|
1 2 |
class example: pass |
Ключове слово return
Оператор return використовується всередині функції для виходу з неї та повернення значення. Якщо ми не повертаємо значення явно, автоматично повертається None. У цьому можна переконатись в наступному прикладі:
|
1 2 3 4 5 6 7 8 9 |
def func_return(): a = 10 return a def no_return(): a = 10 print(func_return()) print(no_return()) |
Результат:
Ключове слово while
Ключове слово while використовується для створення циклу в Python. Стейтменти всередині циклу while продовжують виконуватися доти, доки умова циклу не стане False або не буде виявлено оператора break. Наступна програма ілюструє це:
|
1 2 3 4 |
i = 5 while(i): print(i) i = i - 1 |
Результат:
5
4
3
2
1
Зверніть увагу, що 0 дорівнює False.
Ключове слово with
Конструкція with...as використовується для обертання виконання блоку інструкцій менеджером контексту.
Менеджер контексту — це клас, який реалізує методи __enter__() та __exit__(). Використання оператора with гарантує, що метод __exit__() викликається наприкінці вкладеного блоку. Ця концепція аналогічна використанню блоку try…finally. Нижче наведено приклад:
|
1 2 |
with open('example.txt', 'w') as my_file: my_file.write('Hello world!') |
Тут записується текст Hello world! до файлу example.txt. У файлових об’єктах визначено методи __enter__() та __exit__(), тому вони діють як власний менеджер контексту.
Спочатку викликається метод __enter__(), потім виконується код усередині оператора with, і, нарешті, викликається метод __exit__(). Метод __exit__() викликається навіть у разі помилки. По суті він закриває файловий потік.
Ключове слово yield
Оператор yield використовується всередині функції аналогічно оператору return, але yield повертає генератор.
Генератор — це ітератор, який генерує один елемент за раз. Великий список значень займатиме багато пам’яті. Генератори корисні в цій ситуації, оскільки вони генерують тільки одне значення за раз замість того, щоб зберігати всі значення в пам’яті. Наприклад:
|
1 |
>>> g = (2**x for x in range(100)) |
Тут ми створили генератор g, який генерує число, помножене на 2 в межах діапазону 99. Ми можемо згенерувати числа, використовуючи функцію next() як показано нижче:
|
1 2 3 4 5 6 7 8 9 10 |
>>> next(g) 1 >>> next(g) 2 >>> next(g) 4 >>> next(g) 8 >>> next(g) 16 |
І так далі… Цей тип генератора повертається оператором yield з функції. Нижче наведено приклад:
|
1 2 3 4 5 6 7 |
def generator(): for i in range(6): yield i*i g = generator() for i in g: print(i) |
Результат:
0
1
4
9
16
25
Тут функція generator() повертає генератор, який генерує числа, помножені на порядковий номер від 0 до 5. Ці числа виводяться у циклі for.
