Фото від Ajay Gorecha на Unsplash
Що таке мова програмування Python?
Python — це високорівнева, загального призначення, інтерпретована мова програмування.
1) Високорівнева
Python — це мова програмування високого рівня, що робить її легкою для навчання. Python не вимагає від вас розуміння деталей роботи комп'ютера для ефективної розробки програм.
2) Загального призначення
Python є мовою загального призначення. Це означає, що ви можете використовувати Python у різних сферах, зокрема:
- Веб-додатки
- Додатки для обробки великих даних
- Тестування
- Автоматизація
- Наука про дані, машинне навчання та штучний інтелект
- Десктопні програми
- Мобільні додатки
Цільова мова, така як SQL, може використовуватись для запитів даних з реляційних баз даних.
3) Інтерпретована
Python — це інтерпретована мова. Щоб розробити програму на Python, ви пишете код у файл, що називається вихідним кодом.
Код Python спочатку компілюється у байт-код, а потім інтерпретується рядок за рядком інтерпретатором Python (PVM). Вона не компілює весь код одразу в машинний код перед виконанням.
Мови, що компілюються, як Java та C#, використовують компілятор, який компілює весь вихідний код перед виконанням програми.
Змінні типи даних
Змінні типи — це об'єкти, значення яких можуть змінюватися після їх створення. Найпоширеніші змінні типи даних в Python:
- Списки (
list
) - Словники (
dict
) - Множини (
set
) - Масиви байтів (
bytearray
)
Невідомі типи даних
Невідомі типи — це об'єкти, значення яких не можна змінити після їх створення. До поширених невідомих типів даних в Python належать:
- Кортежі (
tuple
) - Рядки (
str
) - Числа (
int
,float
,complex
) - Заморожені множини (
frozenset
) - Байти (
bytes
)
Який тип даних швидший і чому?
- Невідомі типи зазвичай є швидшими в Python, оскільки вони фіксовані, і Python оптимізує їх обробку всередині (наприклад, інтернування рядків).
- Змінні типи більш гнучкі, але можуть бути повільнішими, оскільки їх значення можуть змінюватися, тому Python повинен ретельніше управляти пам'яттю та об'єктами.
Наприклад, рядки (невідомі) оптимізовані для операцій, таких як конкатенація, і ви не можете випадково змінити рядок. Списки (змінні), з іншого боку, можуть змінюватися, що вимагає більше витрат на управління пам'яттю.
Декоратори в Python
Декоратор — це функція, яка змінює поведінку іншої функції або класу. Він часто використовується для логування, валідації та додавання функцій до перед- та післяобробки.
Приклад декоратора:
def my_decorator(func):
def wrapper():
print("Щось відбувається перед виконанням функції.")
func()
print("Щось відбувається після виконання функції.")
return wrapper
@my_decorator
def say_hello():
print("Привіт!")
say_hello()
Щось відбувається перед виконанням функції.
Привіт!
Щось відбувається після виконання функції.
У цьому прикладі my_decorator
обгортає функцію say_hello
, додаючи поведінку до перед- та післяобробки.
Генератори в Python
Генератор — це спеціальний тип ітератора, який дозволяє ітерувати дані одне за одним, не завантажуючи всі дані в пам'ять одночасно. Генератори визначаються за допомогою ключового слова yield
.
Приклад генератора:
def count_up_to(max):
count = 1
while count <= max:
yield count
count += 1
gen = count_up_to(5)
for number in gen:
print(number)
1
2
3
4
5
У цьому прикладі генератор виводить одне число за раз, тому він не зберігає всі числа в пам'яті.
Ітератори в Python
Ітератор — це об'єкт, який реалізує методи __iter__()
та __next__()
.
Ви можете ітерувати через ітератори (Iterators) за допомогою циклу for
або явно викликаючи next()
.
Приклад ітератора:
class MyIterator:
def __init__(self, max):
self.max = max
self.current = 1
def __iter__(self):
return self
def __next__(self):
if self.current > self.max:
raise StopIteration
else:
self.current += 1
return self.current - 1
my_iter = MyIterator(3)
for num in my_iter:
print(num)
1
2
3
У цьому прикладі, MyIterator
є ітератором, і цикл for
автоматично обробляє виклики __next__()
.
Обробка виключень (Exception Handling) в Python
Python надає потужні механізми обробки виключень (Exceptions) за допомогою блоків try
, except
, else
та finally
.
try:
x = 1 / 0 # Помилка ділення на нуль
except ZeroDivisionError as e:
print("Перехоплено виключення:", e)
Перехоплено виключення: division by zero
Блок try
/else
Блок else
виконується, якщо в блоці try
не виникає жодних виключень.
try:
x = 10 / 2
except ZeroDivisionError:
print("Перехоплено виключення")
else:
print("Жодних виключень не сталося, результат:", x)
Жодних виключень не сталося, результат: 5.0
Користувацькі помилки в Python
Ви можете визначати свої власні виключення (Exceptions), створюючи клас, який наслідується від вбудованого класу Exception
.
Приклад користувацької помилки:
class MyCustomError(Exception):
pass
def my_function():
raise MyCustomError("Це користувацька помилка")
try:
my_function()
except MyCustomError as e:
print(e)
Це користувацька помилка
Контекстні менеджери в Python
Контекстний менеджер (Context Manager) використовується для керування ресурсами, гарантуючи їх правильне отримання та звільнення (наприклад, файли, з'єднання з базами даних). Контекстні менеджери зазвичай використовуються разом з оператором with
.
Приклад контекстного менеджера:
class MyContextManager:
def __enter__(self):
print("Вхід у контекст")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("Вихід з контексту")
with MyContextManager():
print("Всередині контексту")
Вхід у контекст
Всередині контексту
Вихід з контексту
Генератори списків в Python
Генератори списків (List Comprehensions) надають лаконічний спосіб створення списків у Python.
Основний генератор списку:
squares = [x**2 for x in range(5)]
print(squares)
Вивід:
[0, 1, 4, 9, 16]
Ви також можете додавати умовні оператори:
even_squares = [x**2 for x in range(5) if x % 2 == 0]
print(even_squares)
Вивід:
[0, 4, 16]
Підказки типів у Python (Type Hinting)
Підказки типів (Type Hinting) використовуються для вказівки типу змінних і значень, які повертають функції. Це допомагає покращити читабельність коду та дає можливість інструментам, таким як лінтери та IDE, знаходити помилки, пов'язані з типами.
Приклад підказок типів:
def greet(name: str) -> str:
return f"Hello, {name}!"
x: int = 10
y: str = "Hello"
У цьому прикладі, name
очікується як рядок, а функція greet
повинна повертати рядок.
Проміжне програмне забезпечення в веб-фреймворках (Middleware)
Проміжне програмне забезпечення (Middleware) - це шар коду, який перехоплює запити та відповіді у веб-фреймворках (як-от Flask, Django чи FastAPI) до того, як вони потраплять до основної логіки застосунку або після того, як відповідь вже буде згенерована.
Проміжне програмне забезпечення (Middleware) дозволяє розробникам додавати додаткову функціональність, яка обробляє запит або відповідь, таку як логування, аутентифікація або зміна заголовків.
Приклад проміжного програмного забезпечення в FastAPI:
from flask import Flask, request, jsonify
app = Flask(__name__)
# Проміжне програмне забезпечення для логування деталей запиту до обробки
@app.before_request
def log_request():
print(f"Вхідний запит: {request.method} {request.path}")
# Проміжне програмне забезпечення для зміни відповіді
@app.after_request
def modify_response(response):
response.headers["X-Custom-Header"] = "Приклад Middleware"
return response
@app.route("/hello")
def hello():
return jsonify(message="Привіт, світ!")
if __name__ == "__main__":
app.run(debug=True)
Пояснення:
before_request
: Цей хук виконується до того, як запит буде оброблений будь-яким обробником маршруту, дозволяючи вам логувати, змінювати або обробляти дані.after_request
: Цей хук виконується після того, як маршрут обробив запит, але до того, як відповідь буде надіслана клієнту. Тут ви можете додавати заголовки або вносити зміни у відповідь.
Перекладено з: Python Essentials: Understanding Data Types, Decorators, Generators, and More