Pythoner
7.22K subscribers
859 photos
27 videos
4 files
653 links
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику.

Сотрудничество - @flattys
Цены - @serpent_media

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
👍7
Что выдаст код выше
Anonymous Quiz
40%
[1] и [2]
45%
[1] и [1,2]
5%
[1,2] и [1,2]
1%
[2] и [2]
9%
Error
👍9🤔4🤨21
🤔Разбор

Список lst по умолчанию создается один раз при определении функции, а не при каждом вызове.
Поэтому при первом вызове add_to_list(1) список становится [1], а при втором вызове add_to_list(2) к тому же списку добавляется 2, итог — [1, 2].

Это классическая ловушка с изменяемыми аргументами по умолчанию в Python.


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍184🔥4
✈️Алгоритмы сортировки — это методы упорядочивания элементов в определенной последовательности (например, по возрастанию или убыванию). Они являются одними из самых фундаментальных алгоритмов в компьютерных науках и применяются повсеместно, от баз данных до машинного обучения.

➡️Пример реализации алгоритма сортировки. Сортировка пузырьком:
def bubble_sort(arr):
"""Сортировка пузырьком."""
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr

# Пример использования
data = [64, 34, 25, 12, 22, 11, 90]
sorted_data = bubble_sort(data)
print("Отсортированный массив:", sorted_data)


➡️Пример реализации более эффективного алгоритма (Quick Sort):
def quick_sort(arr):
"""Быстрая сортировка."""
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quick_sort(less) + [pivot] + quick_sort(greater)

# Пример использования
data = [64, 34, 25, 12, 22, 11, 90]
sorted_data = quick_sort(data)
print("Отсортированный массив:", sorted_data)


🔎Почему важно знать алгоритмы сортировки?

- Эффективность: Разные алгоритмы имеют разную сложность (например, O(n²) для пузырьковой сортировки и O(n log n) для быстрой сортировки), что влияет на производительность.

- Практическое применение: Сортировка используется везде: от поиска данных до обработки больших наборов информации.

- Обучение логическому мышлению:
Реализация алгоритмов сортировки помогает лучше понимать основы программирования и оптимизации кода.

💡Заключение
Алгоритмы сортировки — это важная часть компьютерных наук. Они позволяют эффективно работать с данными и решать сложные задачи.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83👍2
🔥8👍3
Что выдаст код выше
Anonymous Quiz
41%
1 2 3
21%
3 3 3
14%
0 1 2
2%
3 2 1
23%
Error
👍83🤨3🤓1
🤔Разбор

Lambda-функции в списке захватывают переменную i из внешней области видимости , а не её значение на момент создания. После завершения цикла i становится равным 2 (последнее значение в range(3)).

Поэтому все функции используют i = 2, и результат для любого вызова funcs[n](1) будет 1 + 2 = 3.

Это типичная "ловушка" при работе с замыканиями в циклах.


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123🔥3
✈️Ленивые вычисления — это подход, при котором операции выполняются только тогда, когда их результат действительно нужен. Вместо того чтобы сразу вычислить все значения, ленивые вычисления откладывают обработку до последнего момента, что позволяет экономить время и память, особенно при работе с большими данными.

➡️Пример использования генераторов для ленивых вычислений:
# Генератор для создания бесконечной последовательности чисел
def infinite_sequence():
num = 0
while True:
yield num
num += 1

# Использование генератора
seq = infinite_sequence()
print(next(seq)) # Вывод: 0
print(next(seq)) # Вывод: 1
print(next(seq)) # Вывод: 2


➡️Пример использования itertools для ленивых вычислений:
import itertools

# Создаем бесконечную последовательность четных чисел
even_numbers = itertools.count(0, 2)

# Берем первые 5 элементов из последовательности
first_five = itertools.islice(even_numbers, 5)
print(list(first_five)) # Вывод: [0, 2, 4, 6, 8]


🔎Почему ленивые вычисления важны?
- Экономия памяти: Вместо хранения всех данных в памяти, генераторы создают их по мере необходимости.

- Оптимизация производительности: Нет необходимости выполнять лишние вычисления, если результат не понадобится.

- Обработка больших данных: Ленивые вычисления позволяют работать с огромными наборами данных, которые не помещаются в память.

- Чистый код: Генераторы и ленивые вычисления делают код более читаемым и поддерживаемым.

💡Заключение
Ленивые вычисления — это мощный инструмент для оптимизации программ в Python. Они помогают эффективно использовать ресурсы и работать с большими объемами данных.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥2
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
😁20👍3💯3🤔1
✈️igraph — это популярная библиотека для анализа и визуализации графов, которая доступна как для Python, так и для других языков программирования (R, C). Она позволяет исследовать сложные сети, такие как социальные графы, транспортные системы, веб-сайты и многое другое. Благодаря своей эффективности и гибкости, igraph стал одним из основных инструментов для работы с данными в виде графов.

➡️Основные возможности igraph — генерация случайных и классических графов, вычисление различных метрик (степени вершин, диаметра графа и т. д.), поиск сообществ и кластеров.

➡️Пример создания простого графа:
import igraph as ig

# Создаем граф
graph = ig.Graph()

# Добавляем вершины
graph.add_vertices(5)

# Добавляем ребра
graph.add_edges([(0, 1), (1, 2), (2, 3), (3, 4), (4, 0)])

# Визуализируем граф
ig.plot(graph, vertex_label=range(graph.vcount()), vertex_color="lightblue", edge_width=2)


➡️Пример анализа графа:
import igraph as ig

# Создаем граф
graph = ig.Graph.Tree(10, 2) # Дерево с 10 узлами и ветвлением 2

# Получаем характеристики графа
print("Количество вершин:", graph.vcount()) # Вывод: 10
print("Количество ребер:", graph.ecount()) # Вывод: 9
print("Степень каждой вершины:", graph.degree()) # Вывод: [2, 3, 3, 1, 1, 1, 1, 1, 1, 1]

# Находим диаметр графа
diameter = graph.diameter()
print("Диаметр графа:", diameter)


➡️Некоторые особенности Python-igraph:

— Подходит для анализа графов среднего и большого размера
— Делает акцент на производительности и эффективности использования памяти
— Поддерживает направленные и ненаправленные графы, взвешенные графы
— Имеет богатый набор алгоритмов компоновки
— Интегрируется с популярными библиотеками Python для науки о данных, такими как NumPy и Pandas. 3

💡Заключение
igraph — это универсальный инструмент для анализа и визуализации графов. Он помогает исследовать сложные сети и находить скрытые закономерности в данных. Он особенно полезен для исследователей и учёных, работающих со сложными сетевыми структурами.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3
✈️TensorFlow — это ведущая открытая платформа для машинного обучения, разработанная Google. Она широко используется как в академической среде, так и в промышленности. TensorFlow поддерживает множество приложений, от простых линейных моделей до сложных архитектур глубокого обучения.

➡️Основные понятия TensorFlow
- Тензоры: Многомерные массивы, аналогичные массивам NumPy. Они являются основными элементами, с которыми работает TensorFlow.

- Операции: Функции, которые выполняют вычисления над тензорами.

- Переменные: Значения, которые изменяются в процессе обучения модели.

- Граф вычислений: TensorFlow использует графы для представления математических операций. Каждый узел графа представляет операцию, а ребра — данные (тензоры), передающиеся между операциями.

➡️Построение первой нейронной сети

1.Загрузка данных:
TensorFlow позволяет легко загружать и предобрабатывать данные. В примере ниже мы используем набор данных MNIST, который часто используется для обучения систем обработки изображений:
import tensorflow as tf
from tensorflow.keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


2.Определение модели:
Мы используем API Keras, интегрированный в TensorFlow, для определения нашей нейронной сети:
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])


3.Компиляция модели:

Затем мы компилируем модель, указывая оптимизатор, функцию потерь и метрики:
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])


4.Обучение модели:
Обучаем модель с использованием обучающих данных:
model.fit(x_train, y_train, epochs=5)


5.Оценка модели:
Наконец, оцениваем модель с использованием тестовых данных:
model.evaluate(x_test, y_test)


💡Заключение
TensorFlow в Python — это мощный инструмент для создания моделей машинного обучения. Независимо от того, являетесь ли вы начинающим или опытным разработчиком, обширная экосистема и надежные функции TensorFlow делают его ценным инструментом в вашем арсенале искусственного интеллекта.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115🔥2
✈️Glom — это библиотека Python, которая позволяет удобно работать с вложенными данными. Glom предоставляет инструменты для доступа к вложенным данным и их преобразования, что делает работу с сложными структурами данных более простой и интуитивной.

➡️Основные возможности glom

— Путь доступа к данным: Glom позволяет использовать пути для доступа к вложенным данным, например, a.b.c.

— Объявление преобразований данных: Glom предоставляет инструменты для преобразования данных с помощью лёгких и понятных спецификаций.

— Читаемые сообщения об ошибках: Glom предоставляет читаемые сообщения об ошибках, чтобы помочь вам быстро найти и исправить проблемы.

— Встроенная отладка: Glom предоставляет инструменты для отладки, чтобы помочь вам быстро найти и исправить проблемы.

— Дополнительные возможности: Glom также предоставляет инструменты для глубокого присваивания, потоковой обработки и валидации данных.

➡️Основные примеры использования

1.Доступ к данным:
from glom import glom

# Пример данных
data = {'a': {'b': {'c': 'd'}}}

# Доступ к данным с помощью пути
result = glom(data, 'a.b.c') # Вернёт 'd'
print(result)


2.Обработка вложенных списков:
# Пример данных
data = {'a': [{'k': 'v1'}, {'k': 'v2'}]}

# Доступ к данным в вложенных списках с помощью шаблона
result = glom(data, 'a.*.k') # Вернёт ['v1', 'v2']
print(result)


3.Преобразование данных. Glom позволяет не только получать данные, но и преобразовывать их:
# Пример данных
data = {'a': {'b': 'c', 'd': 'e'}, 'f': 'g', 'h': [0, 1, 2]}

# Определение спецификации преобразования
spec = {'a': 'a.b', 'd': 'a.d', 'h': ('h', [lambda x: x * 2])}

# Применение спецификации преобразования
output = glom(data, spec)
print(output) # Вывод {'a': 'c', 'd': 'e', 'h': [0, 2, 4]}


4.Обработка ошибок. Glom предоставляет читаемые сообщения об ошибках, что позволяет быстро находить и исправлять проблемы:
# Пример данных
data = {'a': {'b': None}}

# Попытка доступа к несуществующему пути
try:
result = glom(data, 'a.b.c')
except Exception as e:
print(e) # Вывод сообщения об ошибке


Документация glom
Руководство по glom

💡Заключение
Glom — это мощный инструмент для работы с вложенными данными. Он позволяет легко получать доступ к данным и преобразовывать их с помощью путей и спецификаций. Glom подходит как для аналитиков данных, так и для разработчиков, которые хотят упростить работу с вложенными структурами данных.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥2
✈️Boltons — это открытая библиотека Python, которая предоставляет набор общих, лёгких и независимых утилит. Создана она Mahmoud Hashemi и доступна на GitHub. Boltons разработаны для того, чтобы дополнить стандартную библиотеку Python, предоставляя функции, которые часто нужны, но отсутствуют в стандартной библиотеке.

➡️Основные возможности
Boltons содержит множество модулей, каждый из которых специализируется на определенной области функциональности. Вот некоторые ключевые модули и возможности:

1. iterutils:
Утилиты для работы с итераторами и итерируемыми объектами, включая расширенные инструменты itertools и шаблоны итерирования.

2. strutils:
Дополнительные инструменты для работы со строками, такие как расширенная интерполяция, форматирование текста и заполнение.

3. fileutils:
Утилиты для работы с файлами и каталогами, включая итерацию по файлам, атомарное сохранение файлов и операции с деревьями каталогов.

4. datetimeutils:
Расширенные инструменты для работы с датами и временем, включая более гибкие возможности парсинга и форматирования, работу с часовыми поясами и операции с
timedelta.

5. funcutils:
Утилиты для работы с функциями, такие как композиция функций, декораторы кэширования и валидации аргументов.

6. cacheutils:
Утилиты для кэширования, такие как LRU-кэш.

7. dictutils:
Расширенные инструменты для работы со словарями, такие как OrderedMultiDict.

8. queueutils:
Утилиты для работы с очередями, такие как PriorityQueue.

9. tbutils:
Утилиты для работы с трассировками стека, такие как тип TracebackInfo, который упрощает отладку и отчёты об исключениях.

➡️Пример использования
from boltons.dictutils import OMD

# OrderedMultiDict — словарь, сохраняющий порядок и поддерживающий дубликаты ключей
data = OMD()
data.add('status', 'ok')
data.add('status', 'warning')

print(data.getlist('status')) # ['ok', 'warning']


💡Заключение
Boltons — это мощная библиотека утилит, которая дополняет стандартную библиотеку Python, предоставляя множество дополнительных инструментов и функций. Независимо от того, являетесь ли вы разработчиком на Python или аналитиком данных, Boltons поможет вам повысить эффективность работы и упростить реализацию кода.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥2
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17😁9🤣7👌1
👍62
Что выдаст код выше
Anonymous Quiz
9%
3 1
58%
3 2
10%
3 3
23%
Error
😢83🤔2👍1🤨1
🤔Разбор

Атрибуты класса (count) являются общими для всех экземпляров класса.
Метод __del__ вызывается автоматически, когда объект уничтожается (например, после выполнения del или когда программа завершается).
Если объект больше не имеет ссылок, он удаляется сборщиком мусора, и вызывается деструктор.


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4🤓3
✈️Astropy — это мощная библиотека Python, предназначенная для астрономических вычислений и анализа данных. Она предоставляет инструменты для работы с астрономическими данными, включая обработку изображений, анализ спектров, управление временем и координатами, а также множество других функций, которые облегчают работу астрономам и исследователям.

⚡️Основные возможности Astropy:

- Управление временем и датами: Astropy предоставляет инструменты для работы с астрономическим временем, включая преобразование между различными временными шкалами и форматами.

- Координатные системы: Библиотека позволяет работать с астрономическими координатами, включая преобразование между различными системами координат (например, экваториальными, эклиптическими и галактическими).

- Обработка изображений: Astropy включает инструменты для чтения, записи и обработки астрономических изображений, включая поддержку формата FITS (Flexible Image Transport System).

- Анализ спектров: Библиотека предоставляет функции для анализа астрономических спектров, включая измерение линий спектра и расчет физических параметров.

- Астрономические единицы и константы: Astropy предоставляет набор астрономических единиц и фундаментальных констант, которые можно использовать в вычислениях.

- Интеграция с другими библиотеками: Astropy интегрируется с другими популярными библиотеками Python, такими как NumPy, SciPy, Matplotlib и Pandas, что позволяет создавать мощные астрономические приложения.

➡️Примеры использования:

1.Работа с временем:
from astropy.time import Time

# Создание объекта времени
t = Time('2023-10-10 12:00:00', format='iso', scale='utc')

# Преобразование времени в другой формат
print(t.jd) # Вывод времени в формате Julian Date


2.Работа с координатами:
from astropy.coordinates import SkyCoord
from astropy import units as u

# Создание объекта координат
c = SkyCoord(ra=10.68458*u.degree, dec=41.26917*u.degree, frame='icrs')

# Преобразование координат в другую систему
print(c.galactic) # Вывод координат в галактической системе


3.Анализ спектров:
from astropy import units as u
from astropy.modeling import models, fitting

# Создание спектра
wavelength = [400, 500, 600, 700] * u.nm
flux = [1, 2, 3, 4] * u.Jy

# Подгонка модели к спектру
model = models.Gaussian1D(amplitude=2*u.Jy, mean=500*u.nm, stddev=50*u.nm)
fitter = fitting.LevMarLSQFitter()
fitted_model = fitter(model, wavelength, flux)

# Вывод параметров модели
print(fitted_model)


💡Заключение
Astropy предоставляет широкий набор инструментов для работы с астрономическими данными, включая обработку изображений, анализ спектров, управление временем и координатами. А благодаря простому и интуитивному API, Astropy легко интегрируется в проекты.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥2
✈️Сегодня разберём тему, которая частенько вызывает головную боль даже у опытных разработчиков — области видимости переменных и ключевые слова global и nonlocal.

➡️В чём суть?
Представьте, что вы пишете функцию внутри функции и вам нужно изменить переменную "снаружи". Без special words Python скажет: "Неа, не получится!"

➡️Как это работает?
Global:
x = 5  # глобальная переменная

def change_x():
global x # говорим Python, что хотим менять глобальную x
x = 10 # теперь работает!

change_x()
print(x) # выведет 10


Nonlocal:
def outer():
counter = 0 # переменная внешней функции

def inner():
nonlocal counter # хотим менять counter из outer
counter += 1 # работает!

inner()
print(counter) # выведет 1

outer()


⚡️Важные моменты:

- Global можно использовать для создания новых переменных
- Nonlocal работает только с существующими переменными
- В Python 3.13 пофиксили баги с global в блоках else и except

➡️Типичные ошибки:
Неправильно:
def bad_function():
print(x) # ошибка!
global x # global нужно объявлять до использования
x = 10


Правильно:
def good_function():
global x
print(x) # теперь всё ок
x = 10


➡️Полезные инструменты:
Чтобы проверить, какие переменные у вас есть:
print(globals())  # все глобальные переменные
print(locals()) # все локальные переменные


💡Практические советы:

- Используйте global только когда действительно необходимо
- Nonlocal отлично подходит для счетчиков и аккумуляторов
- Всегда документируйте использование global и nonlocal в комментариях
- Старайтесь минимизировать использование глобальных переменных

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥3
✈️SymPy — это библиотека Python для символьных вычислений. Она предоставляет инструменты для работы с математическими выражениями, включая алгебру, исчисление, линейную алгебру, комбинаторику и многое другое. SymPy позволяет выполнять вычисления с символьными переменными, что делает ее идеальным инструментом для математиков, физиков и инженеров, которые работают с аналитическими вычислениями.

➡️Основные возможности SymPy:

1.Символьные переменные и выражения:
SymPy позволяет создавать символьные переменные и выполнять операции с ними, не присваивая им конкретных числовых значений.

2.Алгебра:
SymPy предоставляет инструменты для работы с алгебраическими выражениями, включая упрощение, разложение и факторинг.

3.Исчисление:
SymPy поддерживает дифференцирование, интегрирование, пределы и ряды Тейлора.

4.Линейная алгебра:
SymPy позволяет работать с матрицами и векторами, включая операции сложения, умножения, определения и решения систем линейных уравнений.

5.Решение уравнений:
SymPy предоставляет инструменты для решения алгебраических и дифференциальных уравнений.

6.Графики:
SymPy интегрируется с Matplotlib для визуализации математических функций и выражений.

➡️Примеры использования:

1.Создание символьных переменных и выражений:
from sympy import symbols, sin, cos

# Создание символьных переменных
x, y = symbols('x y')

# Создание выражения
expr = sin(x) + cos(y)

# Вывод выражения
print(expr)


2.Работа с матрицами:
from sympy import Matrix

# Создание матрицы
A = Matrix([[1, 2], [3, 4]])

# Вычисление определителя
det_A = A.det()
print('Определитель матрицы A:', det_A)

# Решение системы линейных уравнений
B = Matrix([1, 2])
solutions = A.solve(B)
print('Решение системы уравнений:', solutions)


➡️Документация и дополнительные ресурсы:

Официальный сайт

GitHub

Документация

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥2
👍9