Learn Python Coding
40.1K subscribers
695 photos
34 videos
24 files
492 links
Learn Python through simple, practical examples and real coding ideas. Clear explanations, useful snippets, and hands-on learning for anyone starting or improving their programming skills.

Admin: @HusseinSheikho || @Hussein_Sheikho
Download Telegram
Python Basics Arrays & Loops ๐Ÿ

Essential you need to start strong ๐Ÿ’ช

https://xn--r1a.website/pythonRe ๐Ÿ”—
Please open Telegram to view this post
VIEW IN TELEGRAM
โค5๐Ÿ‘2
Python: simple things that improve code

If you write like this:

if type(x) == str:
    print("This is a string")

it might work, but it breaks on subclasses of str.

It's better to use isinstance(). It takes into account inheritance and is more consistent with polymorphism.

if isinstance(x, str):
    print("This is a string")

This variant will work for str and its subclasses.

Conclusion: type(x) == str is only suitable for simple cases, but it's fragile. isinstance(x, str) is a more stable and correct option almost always.

https://xn--r1a.website/pythonRe ๐Ÿคฉ
Please open Telegram to view this post
VIEW IN TELEGRAM
โค7
Why can't you use mutable default values in constructors?

If you set a list or dictionary as the default value, the object is created once and then reused by all instances.
class User:
    def __init__(self, tags=[]):
        self.tags = tags

This results in a change in one instance affecting the others:
u1 = User(); u2 = User()
u1.tags.append("x"); print(u2.tags)

default_factory creates a new object each time the constructor is called, eliminating shared state:
field(default_factory=list)

Thus, each instance receives an independent data structure:
User().tags is User().tags

๐Ÿ”ฅ Using default_factory is an important practice when working with mutable types and prevents hard-to-detect state errors.

https://xn--r1a.website/pythonRe ๐Ÿ‘
Please open Telegram to view this post
VIEW IN TELEGRAM
โค9๐Ÿ‘1
This media is not supported in your browser
VIEW IN TELEGRAM
๐Ÿ˜Ž The Algorithms Python โ€” a huge collection of algorithms in Python! ๐Ÿ

The repository contains a large number of algorithms and data structures: sorting, graphs, trees, search, dynamic programming, cryptography, and much more. Everything is implemented in pure Python with clear code and a convenient structure. It's perfect for studying algorithms through real examples.

I'll leave a link: GitHub
https://github.com/TheAlgorithms/Python

๐Ÿ‘‰ https://xn--r1a.website/pythonRe
Please open Telegram to view this post
VIEW IN TELEGRAM
โค8
Exploring pathlib for Working with Paths!
Many projects still use os.path for path operations: join, dirname, exists, and more. It works, but the code quickly becomes cluttered with string manipulations and harder to read โ€” especially when there are many paths being actively combined.

Since Python 3.4, there's pathlib โ€” an object-oriented API for working with files and directories.

Importing the module is simple:

from pathlib import Path


You can create a path like any regular object:

path = Path("data/users.json")


When working with Path and the / operator, the correct separators for the current OS are used automatically. This keeps the code portable between Linux, macOS, and Windows without extra checks.

If you need an absolute path, use resolve():

print(path.resolve())


Very often when working with files, you need to check if a path exists:

if path.exists():
    print("File found")


Pathlib also lets you quickly determine the type of file system object:

path.is_file()
path.is_dir()


The Path object has convenient properties for getting path parts. This eliminates manual string parsing and working with split().

print(path.name)    # users.json
print(path.stem)    # users
print(path.suffix)  # .json
print(path.parent)  # data


For joining paths, the / operator is used, which looks noticeably cleaner and is easier to read compared to os.path.join:

base = Path("logs")
file_path = base / "2026" / "app.log"


Creating directories is also compact and convenient:

Path("backup/archive").mkdir(parents=True, exist_ok=True)


Here: parents=True creates nested directories; exist_ok=True doesn't raise an error if the folder already exists.

For reading and writing text files, there are built-in methods that cover most everyday tasks:

config = Path("config.txt")

config.write_text("debug=true", encoding="utf-8")

content = config.read_text(encoding="utf-8")
print(content)


For binary data, read_bytes() and write_bytes() methods are available.

You can iterate through directory contents using iterdir():

for file in Path("logs").iterdir():
    print(file)


If you need to search for files by pattern, use glob():

for py_file in Path(".").glob("*.py"):
    print(py_file)


And for recursive directory traversal, there's rglob():

for file in Path(".").rglob("*.json"):
    print(file)


Practical example โ€” finding logs older than a certain date. This is a more real-world task:

from pathlib import Path
from datetime import datetime

logs = Path("logs")
limit_date = datetime(2026, 1, 1)

for file in logs.glob("*.log"):
    modified = datetime.fromtimestamp(file.stat().st_mtime)

    if modified < limit_date:
        print(file.name, modified)


The stat() method lets you get file metadata: size, modification time, permissions, and other system data.

Deleting files and directories is also built directly into the Path API:

path.unlink()  # file
path.rmdir()   # empty directory


It's important to note that pathlib doesn't fully replace shutil or os. For example, for copying files, recursive directory deletion, or complex permission operations, additional modules are usually used.



๐Ÿ”ฅ pathlib makes working with the file system noticeably cleaner: less string operations, better readability, and more predictable code when working with paths and files.



#Python #Pathlib #Programming #Coding #Developer #SoftwareEngineering #TechTips #LearnPython #PythonTips #FileSystem

https://xn--r1a.website/pythonRe ๐ŸŒŸ
Please open Telegram to view this post
VIEW IN TELEGRAM
โค7
โ” Interview question

What tools are used for error monitoring in Python services?

Answer: Most often, Sentry, centralized logging, and metrics are used. Sentry collects stack traces, context, and shows the frequency of errors.

It's also important to set up alerts - a sharp increase in exceptions usually signals problems after a release or a service degradation.

tags: #interview

https://xn--r1a.website/pythonRe โœ…
Please open Telegram to view this post
VIEW IN TELEGRAM
โค5
20 ADVANCED Python MCQ.pdf
4.4 MB
๐—ฃ๐—ฟ๐—ฒ๐—ถ๐—บ๐—ถ๐—ฎ๐—น ๐—ฃ๐˜†๐˜๐—ต๐—ผ๐—ป ๐—จ๐—น๐˜๐—ถ๐—บ๐—ฎ๐˜๐—ฒ ๐—š๐˜‚๐—ถ๐—ฑ๐—ฒ! ๐Ÿš€๐Ÿโœจ

๐—œ๐—ป๐—ฝ๐˜‚๐˜/๐—ข๐˜‚๐˜๐—ฝ๐˜‚๐˜ ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ“ฅ๐Ÿ“ค
- print()
- input()
- format()

๐——๐—ฎ๐˜๐—ฎ ๐—ง๐˜†๐—ฝ๐—ฒ ๐—–๐—ผ๐—ป๐˜ƒ๐—ฒ๐—ฟ๐˜€๐—ถ๐—ผ๐—ป ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ”„
- int()
- float()
- str()
- bool()
- complex()
- list()
- tuple()
- set()
- dict()
- frozenset()
- bytes()
- bytearray()
- memoryview()

๐— ๐—ฎ๐˜๐—ต๐—ฒ๐—บ๐—ฎ๐˜๐—ถ๐—ฐ๐—ฎ๐—น ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿงฎ๐Ÿ“
- abs()
- pow()
- round()
- divmod()
- sum()
- min()
- max()

๐—ฆ๐—ฒ๐—พ๐˜‚๐—ฒ๐—ป๐—ฐ๐—ฒ & ๐—–๐—ผ๐—น๐—น๐—ฒ๐—ฐ๐˜๐—ถ๐—ผ๐—ป ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ“Š๐Ÿ“‘
- len()
- sorted()
- range()
- zip()
- enumerate()
- reversed()
- all()
- any()

๐—ง๐˜†๐—ฝ๐—ฒ & ๐—œ๐—ฑ๐—ฒ๐—ป๐˜๐—ถ๐˜๐˜† ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ”๐Ÿ†”
- type()
- id()
- isinstance()
- issubclass()

๐—™๐—ถ๐—น๐—ฒ ๐—›๐—ฎ๐—ป๐—ฑ๐—น๐—ถ๐—ป๐—ด ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ“‚๐Ÿ“
- open()
- close()
- read()
- write()
- seek()
- tell()

๐—ฆ๐˜๐—ฟ๐—ถ๐—ป๐—ด ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ”ค๐Ÿ” 
- ord()
- chr()
- ascii()
- repr()

๐—จ๐˜๐—ถ๐—น๐—ถ๐˜๐˜† ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ› โš™๏ธ
- help()
- dir()
- eval()
- exec()
- hash()

๐—Ÿ๐—ผ๐—ด๐—ถ๐—ฐ๐—ฎ๐—น & ๐—•๐—ถ๐—ป๐—ฎ๐—ฟ๐˜† ๐—–๐—ผ๐—ป๐˜ƒ๐—ฒ๐—ฟ๐˜€๐—ถ๐—ผ๐—ป ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿง ๐Ÿ”ข
- bin()
- oct()
- hex()
- bool()

๐— ๐—ฒ๐—บ๐—ผ๐—ฟ๐˜† & ๐—ข๐—ฏ๐—ท๐—ฒ๐—ฐ๐˜ ๐—›๐—ฎ๐—ป๐—ฑ๐—น๐—ถ๐—ป๐—ด ๐—™๐˜‚๐—ป๐—ฐ๐˜๐—ถ๐—ผ๐—ป๐˜€ ๐Ÿ’พ๐Ÿ“ฆ
- memoryview()
- object()
- callable()


#PythonGuide #PythonFunctions #CodingLife #LearnPython #DevCommunity #PyTips

https://xn--r1a.website/pythonRe โœ…
Please open Telegram to view this post
VIEW IN TELEGRAM
โค4
๐Ÿ™๐Ÿ’ธ 500$ FOR THE FIRST 500 WHO JOIN THE CHANNEL! ๐Ÿ™๐Ÿ’ธ

Join our channel today for free! Tomorrow it will cost 500$!

https://xn--r1a.website/+-WZeIeP8YI8wM2E6

You can join at this link! ๐Ÿ‘†๐Ÿ‘‡

https://xn--r1a.website/+-WZeIeP8YI8wM2E6
โค4
If you work with Python, remember a simple rule: do not modify a list while iterating over it. ๐Ÿ๐Ÿ›‘ This can lead to unexpected results because the iterator does not track structural changes.

Here is an example that looks logical but works incorrectly: ๐Ÿค”

items = [1, 2, 2, 3, 4]
for item in items:
    if item == 2:
        items.remove(item)
print(items)
# Output: [1, 2, 3, 4]


It seems that all 2s should disappear, but one remains. โ“ Why?

After removing an element, the list shifts, but the loop moves on โ€” as a result, some values are simply skipped. ๐Ÿ”„๐Ÿšซ

How to do it correctly โ€” iterate over a copy: โœ…

for item in items[:]:
    if item == 2:
          items.remove(item)
print(items)
# Output: [1, 3, 4]


Even better โ€” use list comprehension: ๐Ÿš€

items = [x for x in items if x != 2]

Conclusion: ๐Ÿ do not modify a collection during iteration. This can lead to skipped elements, duplication, or even errors during execution. ๐Ÿ› ๏ธ๐Ÿšง

#Python #Coding #Programming #Debugging #TechTips #PythonTips
โค2
Many applications require mapping strings to integers. In Python, this usually looks like:

d = {"apple": 100, "banana": 200, "cherry": 300}


If there are 1 million keys, this can consume a lot of memory โ€” more than 100 bytes per key.
Our elephant has published a new library that uses about 9 bytes per key. Yes, only 9 bytes. Usage looks like this:

from fastconstmap import ConstMap

d = {"apple": 100, "banana": 200, "cherry": 300}
m = ConstMap(d)

m["apple"]                  # -> 100
m.get_many(["banana", "cherry"])  # -> [200, 300]


It can be significantly faster (for example, up to 2 times in some cases) than the standard dictionary. It can also be serialized and deserialized to disk or network for convenient reuse.

https://pypi.org/project/fastconstmap/

github: https://github.com/lemire/fastconstmap

๐Ÿ‘‰ @PythonRe
Please open Telegram to view this post
VIEW IN TELEGRAM
โค7
The Python library itertools contains many useful functions. ๐Ÿโœจ

One of them is compress(), which returns an iterator over the elements from data, for which the corresponding element in selectors is equal to True. ๐Ÿ”๐Ÿ’ป

Here's an example: ๐Ÿ“๐Ÿ‘‡

#Python #Programming #Itertools #Coding #Tech #DataScience
๐Ÿ”ฅ2
Cheat sheet on the basics of Python: ๐Ÿ๐Ÿ“š

basic syntax and language rules ๐Ÿ“
scalar types โ€” basic data types (int, float, bool, str, NoneType) ๐Ÿ”ข

datetime โ€” working with date and time ๐Ÿ“…โฐ

data structures โ€” Python data structures (list, tuple, dict, set) ๐Ÿ—„

list โ€” mutable lists for storing data collections ๐Ÿ“‹
tuple โ€” immutable sequences of values ๐Ÿ”’
dict (hash map) โ€” storing data in a key-value format ๐Ÿ—
set โ€” unique elements without order ๐Ÿ”˜

slicing โ€” obtaining parts of sequences through indices and step โœ‚๏ธ

module/library โ€” connecting modules and libraries ๐Ÿ”Œ

help functions โ€” using help() and dir() to explore the Python API ๐Ÿ› 

#Python #Coding #DataScience #Programming #Tech #DevCommunity
โค5๐Ÿ”ฅ4๐Ÿ‘2
Do you know that Python can shift sequences without slicing and creating new lists? ๐Ÿค”

When you need to cyclically shift data, many use slicing:

data = data[-1:] + data[:-1]

But deque.rotate() does this at the level of the data structure and usually works more efficiently for cyclical operations. ๐Ÿš€

q.rotate(1)

A negative value rotates the queue in the other direction. โฌ…๏ธ

q.rotate(-2)

This is useful for ring buffers, task schedulers, cyclical queues, and round-robin algorithms. ๐Ÿ”„

workers.rotate(-1)

๐Ÿ”ฅ deque.rotate() allows you to implement cyclical data structures without manual index logic and without creating new lists. ๐Ÿ’ก

#Python #Programming #Deque #CodingTips #Tech #DevCommunity
โค7
"Open Data Structures" is another very useful free resource for anyone studying data structures and algorithms. ๐Ÿ“šโœจ

The book discusses the implementation and analysis of basic structures: array-based lists, linked lists, hash tables, binary trees, red-black trees, heaps, sorting algorithms, graphs, and data structures for working with integers. ๐Ÿ”๐Ÿงฎ

This is a full-fledged open textbook for studying one of the fundamental topics of computer science and a good reference that's worth keeping on hand. ๐Ÿ’ป๐ŸŒŸ

https://opendatastructures.org/ods-python.pdf ๐Ÿ“„

๐Ÿ‘‰ @PythonRe

#DataStructures #Algorithms #Python #ComputerScience #OpenSource #Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
โค8๐Ÿ‘1
How to check for the presence of subclasses in Python? ๐Ÿ๐Ÿง

Here's how you can do it:

import inspect

def has_subclasses(cls):
return any(issubclass(sub, cls) for sub in inspect.getmembers(sys.modules[cls.__module__], inspect.isclass))

This function uses the inspect module to find all subclasses of the given class. ๐Ÿ› ๏ธ

#Python #Programming #Subclasses #Coding #Dev #Tech
โค5๐Ÿ‘1
๐Ÿ“‚ Reminder about Python map()!

map() โ€” a built-in function that applies the specified function to each element of an iterable object (list, tuple, set, etc.).

The picture shows the basic syntax, an example of use with lambda, and a typical case โ€” data transformation without a manual for loop.

Save it to quickly remember the syntax!

๐Ÿ๐Ÿ’ป๐Ÿ—บ๏ธ #Python #Coding #Programming #LearnToCode #DevTips #Tech
โค7๐Ÿ‘1
If you're working with data pipelines, these repositories are very useful: ๐Ÿš€๐Ÿ“Š

ibis: A Python API that allows you to write queries once and run them on different data backends, such as DuckDB, BigQuery, and Snowflake. ๐Ÿ๐Ÿ”—
https://github.com/ibis-project/ibis

pygwalker: Instantly turns a DataFrame into an interactive UI for visual data exploration. ๐Ÿ“ˆ๐Ÿ–ฅ๏ธ
https://github.com/Kanaries/pygwalker

katana: A fast and scalable web crawler, often used for security testing and large-scale data collection/search. ๐Ÿ•ท๏ธ๐Ÿ”’
https://github.com/projectdiscovery/katana

#dataengineering #python #opensource #devtools #dataviz #security
โค4
"Introduction to Algorithms" ๐Ÿ“˜ - an outstanding university resource for everyone studying algorithms and computer science. ๐ŸŽ“๐Ÿ’ป

The book covers computational complexity, data structures, algorithms on graphs, dynamic programming, divide-and-conquer methods, greedy algorithms, randomized algorithms, and many mathematical foundations of modern computer science. ๐Ÿงฎ๐Ÿ“Š๐Ÿ”

What's particularly valuable here is the combination of mathematical rigor and practical algorithmic thinking. ๐Ÿง โœจ This is one of those books that greatly change the approach to problem analysis, efficiency, and computing itself. ๐Ÿš€๐Ÿ› 

An essential tool in the library of any developer and engineer working in the field of computer science. ๐Ÿ—๐Ÿ’พ

https://www.cs.mcgill.ca/~akroit/math/compsci/Cormen%20Introduction%20to%20Algorithms.pdf ๐Ÿ”—

#Algorithms #ComputerScience #Programming #CSStudent #TechEducation #DevTools
โค2
Why is enumerate() used in Python? ๐Ÿค”๐Ÿ

It allows you to simultaneously obtain the value of an element and its index when iterating through a list. ๐Ÿ“Šโœจ

This is more convenient and more readable than manually working with a counter. โœ…๐Ÿš€

for i, item in enumerate(items):
print(i, item)


#Python #Coding #Programming #Dev #Tech #Code

โœจ Join Best TG Channels
https://xn--r1a.website/addlist/0f6vfFbEMdAwODBk

โญ๏ธ Join Our WhatsApp Channel
https://whatsapp.com/channel/0029VaC7Weq29753hpcggW2A
โค4๐Ÿ‘1๐Ÿ‘1
Data validation with Pydantic! ๐Ÿโœจ

In the early stages of development, data validation usually doesn't cause problems. In many Python projects, validation initially looks simple:

if not isinstance(age, int):
raise ValueError("age must be an int")

But then come email, JSON from APIs, query parameters, nested objects, configs, nullable fields, and type conversion. At some point, the code turns into a set of if/else and manual checks.

For such tasks, Pydantic is often used. Installation:

pip install pydantic
pip install "pydantic[email]"

Create a model:

from pydantic import BaseModel

class User(BaseModel):
name: str
age: int

Now the data is validated automatically:

user = User(
name="Alex",
age="30"
)

print(user.age)
print(type(user.age))

The result:
30
<class 'int'>

Pydantic will automatically convert the string "30" to an int. If you pass an incorrect value, you'll get a ValidationError:

User(
name="Alex",
age="test"
)

This is especially convenient when working with APIs, JSON, query parameters, and incoming data from outside.

A common production case is checking email:

from pydantic import BaseModel, EmailStr

class User(BaseModel):
email: EmailStr

User(email="alex@test.com")

If the email is invalid, Pydantic will throw a ValidationError. You can set default values:

from pydantic import BaseModel

class Config(BaseModel):
host: str = "localhost"
port: int = 5432

And allow None:

from pydantic import BaseModel

class User(BaseModel):
nickname: str | None = None

This field becomes optional. A practical example is processing an API response:

from pydantic import BaseModel

class Product(BaseModel):
id: int
title: str
price: float

data = {
"id": "1",
"title": "Keyboard",
"price": "99.5"
}

product = Product(**data)

print(product)

The types will be automatically converted. For nested model structures, you can combine:

from pydantic import BaseModel

class Address(BaseModel):
city: str
zip_code: str

class User(BaseModel):
name: str
address: Address

user = User(
name="Alex",
address={
"city": "Berlin",
"zip_code": "10115"
}
)

print(user)

The nested object will also be validated. Serialization in Pydantic v2:

print(user.model_dump())
print(user.model_dump_json())

Pydantic is actively used in FastAPI, ETL, microservices, data pipelines, and API clients.

For working with environment variables in Pydantic v2, a separate package is usually used:

pip install pydantic-settings

It's important to understand: Pydantic is not an ORM and does not replace business logic. Its task is to validate data, convert types, and describe schemas.

๐Ÿ”ฅ Pydantic significantly reduces the amount of manual data validation and makes processing incoming structures more predictable.

#Python #Pydantic #DataValidation #FastAPI #Coding #DevOps

โœจ Join Best TG Channels https://xn--r1a.website/addlist/0f6vfFbEMdAwODBk
โญ๏ธ Join Our WhatsApp Channel https://whatsapp.com/channel/0029VaC7Weq29753hpcggW2A
โค4๐Ÿ‘1