Основи Python: Розуміння типів даних, декораторів, генераторів та іншого

pic

Фото від 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

Leave a Reply

Your email address will not be published. Required fields are marked *