from itertools import cycle
colors = ["red", "green", "blue"]
color_cycle = cycle(colors)
for _ in range(5):
print(next(color_cycle)) # red → green → blue → red → green
- Повторение элементов списка без переписывания вручную.
- Автоматическое зацикливание без индексов.
- Полезно в анимациях, смене тем, бесконечных процессах.
itertools.cycle — мощный инструмент для циклических операций без лишнего кода.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6🔥4
class Example:
class_attr = "Hello"
@staticmethod
def static_method():
return "I'm a static method"
@classmethod
def class_method(cls):
return f"Class method: {cls.class_attr}"
print(Example.static_method()) # I'm a static method
print(Example.class_method()) # Class method: Hello
@staticmethod ведёт себя как обычная функция внутри класса, не имея доступа к атрибутам класса или экземпляра. @classmethod, наоборот, получает ссылку на класс (cls) и может изменять его атрибуты.Используйте
@staticmethod для независимых функций, а @classmethod, когда нужно работать с самим классом.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4🔥2
RestApi работает на основе нескольких принципов. Один из них - это использование универсальных интерфейсов. Это означает, что клиенты и серверы должны использовать общие методы передачи данных, такие как HTTP-протоколы GET, POST, PUT и DELETE.
Другой принцип - это использование ресурсов. Ресурсы - это общие сущности, которые могут быть представлены в виде URL-адресов. Например, веб-сервис может представлять собой коллекцию пользователей, каждый из которых является отдельным ресурсом.
- RestApi имеет множество преимуществ. Одно из них - это возможность создания универсальных веб-сервисов, которые могут взаимодействовать с любым клиентом, который может использовать общие методы передачи данных.
- RestApi также обеспечивает гибкость и масштабируемость веб-сервисов. Это означает, что веб-сервисы могут легко добавляться и масштабироваться по мере необходимости.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥3
class Parent:
def greet(self):
return "Hello from Parent"
class Child(Parent):
def greet(self):
return super().greet() + " and Child"
obj = Child()
print(obj.greet()) # "Hello from Parent and Child"
super() особенно полезен при множественном наследовании, так как помогает вызывать методы родительских классов без явного указания их имен.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥4❤3
def count_up_to(n):
count = 1
while count <= n:
yield count # Возвращает значение и приостанавливает выполнение
count += 1
for num in count_up_to(5):
print(num)
yield позволяет приостанавливать и возобновлять выполнение функции, экономя память и упрощая работу с потоками данных.Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3🔥2👏1
🤯7👍3🤔3👀2❤1
Тут банально будет ошибка, потому что мы не можем складывать между собой множества.
Если бы мы хотели добавить элемент, мы бы писали a.add(1).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍6🔥3😁2
def square(x):
return x ** 2
square_lambda = lambda x: x ** 2
print(square(5)) # 25
print(square_lambda(5)) # 25
1.
map() — Применение функции к спискуnums = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, nums))
print(squared) # [1, 4, 9, 16]
2.
filter() — Фильтрация данныхeven = list(filter(lambda x: x % 2 == 0, nums))
print(even) # [2, 4]
3.
sorted() — Сортировка по ключуpairs = [(1, 'one'), (3, 'three'), (2, 'two')]
pairs.sort(key=lambda x: x[0])
print(pairs) # [(1, 'one'), (2, 'two'), (3, 'three')]
lambda?- Когда функция простая и короткая
- Когда она нужна один раз
lambda, если логика сложная – лучше писать def.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5🔥4
class NowMixin(object):
def now():
return datetime.datetime.utcnow()
now().Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤6🔥2
class Person:
def init(self, name):
self._name = name
@property
def name(self):
return self._name
p = Person("Alice")
print(p.name) # Alice (как атрибут, но с логикой)
- Позволяет использовать методы как атрибуты
- Защищает данные от прямого изменения
- Позволяет добавить логику без изменения интерфейса
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥3
import pyshorteners
s = pyshorteners.Shortener()
url = "https://example.com/your-long-link-here"
print(s.tinyurl.short(url))
# Вывод: https://tinyurl.com/2p6n3x6d
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥3
from githubkit import GitHub, Response
from githubkit.versions.latest.models import FullRepository
# Создаем объект GitHub, передав токен доступа
github = GitHub("<ваш_token_здесь>")
# Выполняем запрос к API GitHub для получения репозитория
resp: Response[FullRepository] = github.rest.repos.get("owner", "repo")
# Получаем данные о репозитории
repo: FullRepository = resp.parsed_data
# Выводим название репозитория
print(repo.full_name)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3
Что выдаст код выше❔
Anonymous Quiz
30%
[1], [2], [3], [4]
41%
[1], [1, 2], [3], [1, 2, 4]
13%
[1], [1,2], [3], [4]
15%
Error
❤5👍3🔥3
В Python аргументы по умолчанию вычисляются один раз при определении функции, а не при каждом вызове.
Когда мы вызываем func(1) → список y создаётся один раз и сохраняется. В него добавляется 1. Результат: [1].
При вызове func(2) используется тот же самый список, в который уже добавлена 1. Теперь добавляется 2. Результат: [1, 2].
При вызове func(3, []) мы передаём новый пустой список вместо значения по умолчанию. В него добавляется 3. Результат: [3].
При вызове func(4) снова используется старый общий список, где уже [1, 2]. Добавляется 4. Результат: [1, 2, 4].
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3👍2
В Python для этого есть встроенный инструмент — argparse.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--name', required=True, help='Имя пользователя')
parser.add_argument('--age', type=int, help='Возраст')
args = parser.parse_args()
print(f"Привет, {args.name}! Тебе {args.age} лет.")
Запускаем в терминале:
python script.py --name Алиса --age 25
Вывод:
Привет, Алиса! Тебе 25 лет.
- Удобно передавать параметры
- Можно добавлять флаги, типы, help-сообщения
- Работает из коробки — без установки сторонних библиотек
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4❤3
class Person:
def init(self, name, age):
self.name = name
self.age = age
p = Person("Alice", 25)
p.city = "New York" # Можно добавить новый атрибут
class Person:
slots = ("name", "age") # Разрешены только эти атрибуты
def init(self, name, age):
self.name = name
self.age = age
p = Person("Alice", 25)
p.city = "New York" # ❌ AttributeError: 'Person' object has no attribute 'city'
- Экономит память (не создается
dict)- Ускоряет доступ к атрибутам
- Предотвращает создание лишних атрибутов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5🔥3
Допустим, у нас есть список чисел, и мы хотим возвести каждое число в квадрат:
data = list(range(1_000_000))
squared = [x**2 for x in data] # Медленно!
Используем библиотеку NumPy, которая оптимизирована для работы с массивами:
import numpy as np
data_np = np.arange(1_000_000)
squared_np = data_np ** 2 # В десятки
Если ваш код обрабатывает большие объемы данных, замена циклов Python на операции с NumPy может ускорить выполнение в 10–100 раз! Это особенно важно в научных вычислениях, анализе данных и машинном обучении, где скорость обработки данных критична.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤6🔥3