Code With Python
39.1K subscribers
865 photos
26 videos
22 files
762 links
This channel delivers clear, practical content for developers, covering Python, Django, Data Structures, Algorithms, and DSA – perfect for learning, coding, and mastering key programming skills.
Admin: @HusseinSheikho || @Hussein_Sheikho
Download Telegram
A generator in Python is a function that returns an iterator object instead of a single result.

It differs from regular functions in that it uses the yield keyword instead of return. Each call to next(generator) produces the next value from the sequence.

Example:

def multiple_generator(x, n):
    for i in range(1, n + 1):
        yield x * i

multiples_of_5 = multiple_generator(5, 3)

print(next(multiples_of_5))  # 5
print(next(multiples_of_5))  # 10
print(next(multiples_of_5))  # 15



https://t.iss.one/DataScience4 ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Optimization | Python Best Practices

📖 Guidelines and best practices for optimizing your Python code.

🏷️ #Python
Constants | Python Best Practices

📖 Guidelines and best practices for using constants in your Python code.

🏷️ #Python
How to Integrate ChatGPT's API With Python Projects

📖 Learn how to use the ChatGPT Python API with the OpenAI library to build AI-powered features in your Python applications.

🏷️ #intermediate #ai #api
Dependency Management | Python Best Practices

📖 Guidelines and best practices for dependency management in Python.

🏷️ #Python
Python's deque: Implement Efficient Queues and Stacks

📖 Use a Python deque to efficiently append and pop elements from both ends of a sequence, build queues and stacks, and set maxlen for history buffers.

🏷️ #intermediate #datastructures #python #stdlib
1
Reference: Python’s Built-in Exceptions

📖 Predefined error classes that the Python interpreter uses to handle various error conditions.

🏷️ #47_terms
Reference: Python Best Practices

📖 Widely accepted and established guidelines, conventions, tips, and best practices for Python programmers.

🏷️ #23_terms
Python tip:

You can make dataclass fields immutable by setting frozen=True.
In this case, fields cannot be mutated after the instance is created.

Example below👇

from dataclasses import dataclass

@dataclass(frozen=True)
class Color:
    name: str
    hex_value: str

color = Color("red", "#FF0000")

# color.name = "blue"  # will raise FrozenInstanceError


👉 @codeprogrammer
Please open Telegram to view this post
VIEW IN TELEGRAM
1
assertion | Python Glossary

📖 A debugging aid that tests a condition as an internal self-check.

🏷️ #Python
dataframe | Python Glossary

📖 A data structure for working with tabular data in Python.

🏷️ #Python
2
Accelerating the Sieve of Eratosthenes

1. Quickly recall the algorithm

Classic implementation:

def eratosthenes(n):
    is_prime = [True] * (n + 1)
    is_prime[0] = is_prime[1] = False

    for i in range(2, int(n ** 0.5) + 1):
        if is_prime[i]:
            for j in range(i * i, n + 1, i):
                is_prime[j] = False

    return is_prime


Time — O(N log log N). We're not interested in the asymptotics, but in how much we can speed up the implementation itself.

2. Optimization #1 — don't bother with even numbers

The idea is simple:

* all even numbers except 2 are composite
* if we only work with odd numbers, we reduce the array size and the number of iterations by about half

Implementation:

def eratosthenes_odd(n):
    if n < 2:
        return []

    size = (n + 1) // 2
    is_prime = [True] * size
    is_prime[0] = False

    limit = int(n ** 0.5) // 2
    for i in range(1, limit + 1):
        if is_prime[i]:
            p = 2 * i + 1
            start = (p * p) // 2
            for j in range(start, size, p):
                is_prime[j] = False

    return is_prime


3. Optimization #2 — use bytearray instead of list[bool]

Thought:

* bool in Python is an object
* bytearray is a tightly packed buffer
* less overhead and better fits into the CPU cache

Example:

def eratosthenes_bytearray(n):
    is_prime = bytearray(b"\x01") * (n + 1)
    is_prime[0:2] = b"\x00\x00"

    for i in range(2, int(n ** 0.5) + 1):
        if is_prime[i]:
            for j in range(i * i, n + 1, i):
                is_prime[j] = 0

    return is_prime


4. Optimization #3 — a hybrid of the two approaches

def eratosthenes_fast(n):
    if n < 2:
        return []

    size = (n + 1) // 2
    is_prime = bytearray(b"\x01") * size
    is_prime[0] = 0

    limit = int(n ** 0.5) // 2
    for i in range(1, limit + 1):
        if is_prime[i]:
            p = 2 * i + 1
            start = (p * p) // 2
            is_prime[start::p] = b"\x00" * (((size - start - 1) // p) + 1)

    return is_prime


5. Time comparison

Test with n = 10_000_000:

>>> eratosthenes.py
real  0.634s

>>> eratosthenes_odd.py
real  0.245s

>>> eratosthenes_bytearray.py
real  0.801s

>>> eratosthenes_fast.py
real  0.028s


Conclusions:

* skipping even numbers (#1) gives ~2.6× speedup
* bytearray itself doesn't speed up — it's more about memory
* the hybrid (#3) gives ~22.6× speedup

Key trick in #3:

is_prime[start::p] = b"\x00" * (((size - start - 1) // p) + 1)


There's no Python loop here — everything is done by a C-level operation on the slice. On such tasks, this makes a huge difference.

General idea: in Python, we often speed up not the asymptotics, but the memory model and the number of passes over the data. Loops + memory → the main factors.

👉 @DataScience4
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Boolean flag | Python Glossary

📖 A variable or function parameter that you set to either True or False.

🏷️ #Python
Please open Telegram to view this post
VIEW IN TELEGRAM