Python Tutorial #22: Build a CLI Tool — Click and Rich

In the previous tutorial, we learned about logging and debugging. Now let’s build our first real project — a command-line task manager using Click for argument parsing and Rich for colored output. This project uses everything we have learned so far: dataclasses, file I/O, error handling, testing, and more. By the end, you will have a working CLI tool you can install with pip install. What We Are Building A task manager that runs in the terminal: ...

April 30, 2026 · 9 min

Python Tutorial #21: Logging and Debugging — Professional Python

In the previous tutorial, we learned about databases with SQLite and SQLAlchemy. Now let’s learn about logging and debugging — the professional way to understand what your program is doing. If you still use print() to debug your code, this tutorial is for you. By the end, you will know how to use Python’s logging module, debug with breakpoint(), and profile your code. Why print() is Not Enough Every beginner uses print() for debugging: ...

April 30, 2026 · 8 min

Python Tutorial #20: Databases — SQLite and SQLAlchemy

In the previous tutorial, we learned about HTTP requests and APIs. Now let’s learn about databases — how to store, read, update, and delete data using Python. We will cover two approaches: Python’s built-in sqlite3 module (no installation needed) and SQLAlchemy (the most popular Python ORM). By the end of this tutorial, you will know how to build data-driven applications. What is SQLite? SQLite is a database that stores everything in a single file. It comes built into Python — no installation, no server, no configuration. It is perfect for: ...

April 30, 2026 · 8 min

Python Tutorial #19: HTTP and APIs — Requests, httpx, and REST

In the previous tutorial, we learned about async/await and asyncio. Now let’s learn about HTTP requests and APIs — how to call REST APIs, send data, handle responses, and build a reusable API client. Almost every Python application talks to an API at some point. Weather data, payment processing, social media, databases — they all use HTTP. By the end of this tutorial, you will know how to make HTTP requests, handle errors, and build a clean API client. ...

April 29, 2026 · 8 min

Python Tutorial #18: Async/Await — Asynchronous Python

In the previous tutorial, we learned about testing with pytest. Now let’s learn about async/await — Python’s way to run multiple tasks at the same time without threads. Async programming is one of the most powerful features in modern Python. It is used in web frameworks (FastAPI), HTTP clients (httpx), database drivers, and many other libraries. By the end of this tutorial, you will understand how async works and when to use it. ...

April 29, 2026 · 10 min

Python Tutorial #17: Testing with pytest — Write Tests That Matter

In the previous tutorial, we learned about type hints. Now let’s learn about testing — how to write tests that catch bugs and give you confidence to change your code. Testing is one of the most valuable skills you can learn as a developer. It saves time in the long run, makes refactoring safe, and serves as living documentation. When you have tests, you can change code confidently — if the tests pass, you know nothing is broken. By the end of this tutorial, you will know how to write tests with pytest, use fixtures, parametrize tests, and mock external dependencies. ...

April 29, 2026 · 11 min

Python Tutorial #16: Type Hints Deep Dive — Writing Safer Python

In the previous tutorial, we learned about context managers. Now let’s take a deep dive into type hints — annotations that make your code safer, more readable, and easier to refactor. We have been using basic type hints since Tutorial #3. Now it is time to learn the advanced types: Optional, Union, Literal, Annotated, TypeAlias, Callable, and more. By the end of this tutorial, you will know how to annotate any Python code and use tools like mypy to catch bugs before runtime. ...

April 28, 2026 · 10 min

Python Tutorial #15: Context Managers — with Statement and Resource Management

In the previous tutorial, we learned about decorators. Now let’s learn about context managers — the mechanism behind the with statement. You have been using with since the file I/O tutorial: with open("file.txt") as f: content = f.read() # File is automatically closed here But what actually happens behind the scenes? And how do you create your own with-compatible objects? By the end of this tutorial, you will understand the protocol behind context managers and know how to build your own for resource management, timing, transactions, and more. ...

April 28, 2026 · 9 min

Python Tutorial #14: Decorators — Functions That Modify Functions

In the previous tutorial, we learned about generators and iterators. Now let’s learn about decorators — a powerful pattern that lets you modify functions without changing their code. Decorators are one of Python’s most distinctive features. They are used everywhere: web frameworks (Flask, FastAPI), testing (pytest), caching, authentication, and validation. By the end of this tutorial, you will know how to create your own decorators and understand the ones you encounter in libraries. ...

April 28, 2026 · 9 min

Python Tutorial #13: Generators and Iterators — Lazy Data Processing

In the previous tutorial, we learned about file I/O. Now let’s learn about generators and iterators — tools for processing data lazily without loading everything into memory. A generator produces values one at a time. It only calculates the next value when you ask for it. This is called lazy evaluation. Instead of creating a list of one million items in memory, a generator produces them one by one. By the end of this tutorial, you will know how to create generators, build data pipelines, and use itertools for efficient data processing. ...

April 27, 2026 · 10 min