bookpython | Unsorted

Telegram-канал bookpython - Библиотека Python разработчика | Книги по питону

19203

Полезные материалы для питониста по Фреймворкам Django, Flask, FastAPI, Pyramid, Tornado и др. По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq

Subscribe to a channel

Библиотека Python разработчика | Книги по питону

Вебинар по защите веб-приложений. UserGate WAF

Приглашаем вас на вебинар, где узнаете, какие задачи решает и как защищает веб-приложения от современных угроз — UserGate WAF.

На вебинаре вы узнаете:
- Какие задачи решает UserGate WAF.
- Как использование продукта поможет защитить ваши веб-приложения от современных угроз.
- О подходах к разработке продукта и формировании экспертизы в этой области.

⚡Регистрация на вебинар уже открыта.

Зарегистрироваться

#реклама 16+
webinar.usergate.com

О рекламодателе

Читать полностью…

Библиотека Python разработчика | Книги по питону

Списковые включения (list comprehensions) могут содержать несколько операторов for и if:


In : [(x, y) for x in range(3) for y in range(3)]
Out: [
(0, 0), (0, 1), (0, 2),
(1, 0), (1, 1), (1, 2),
(2, 0), (2, 1), (2, 2)
]


Можно также добавлять условия if для фильтрации значений:


In : [
(x, y)
for x in range(3)
for y in range(3)
if x != 0
if y != 0
]
Out: [(1, 1), (1, 2), (2, 1), (2, 2)]


Любое выражение с for и if может использовать все переменные, определённые ранее:


In : [
(x, y)
for x in range(3)
for y in range(x + 2)
if x != y
]
Out: [
(0, 1),
(1, 0), (1, 2),
(2, 0), (2, 1), (2, 3)
]


Вы можете комбинировать for и if в любом порядке:


In : [
(x, y)
for x in range(5)
if x % 2
for y in range(x + 2)
if x != y
]
Out: [
(1, 0), (1, 2),
(3, 0), (3, 1), (3, 2), (3, 4)
]


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Многие системные вызовы могут быть прерваны входящим сигналом. Если программист хочет, чтобы вызов всё же был выполнен, ему нужно повторить его снова.

Яркий пример — функция sleep(x), которая должна "заморозить" программу на x секунд, но на практике может завершиться раньше, если появится сигнал.

Однако, начиная с Python 3.5, благодаря PEP 475, Python автоматически обрабатывает все такие вызовы. Следующая программа завершится при первом полученном SIGINT в любой версии Python до 3.5. Но в Python 3.5+ она будет спать ровно 5 секунд, независимо от сигналов.


import signal
import time

def signal_handler(signal, frame):
print('Caught')

signal.signal(signal.SIGINT, signal_handler)

time.sleep(5)


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Оптимизация SQL-запросов в Django ORM

Сегодня я покажу вам, как оптимизировать SQL-запросы в Django ORM, чтобы ваш код работал быстрее и эффективнее. Если ваш Django-проект начал тормозить, скорее всего, проблема в количестве и сложности запросов к базе данных.

1️⃣ Используйте select_related и prefetch_related
Django ORM лениво загружает связанные объекты, что может привести к множественным SQL-запросам (N+1). Вместо этого используйте:


# select_related — жадная загрузка (для ForeignKey, OneToOne)
posts = Post.objects.select_related("author").all()

# prefetch_related — для ManyToMany и Reverse ForeignKey
posts = Post.objects.prefetch_related("comments").all()

Это значительно уменьшает количество запросов к базе.

2️⃣ Используйте only и defer
Если вам не нужны все поля модели, загружайте только необходимые:


users = User.objects.only("id", "username") # Загружаем только ID и имя


А если хотите исключить несколько полей:


users = User.objects.defer("bio", "last_login") # Исключаем ненужные поля


3️⃣ Агрегация вместо перебора в Python
Вместо:


total_likes = sum(post.likes.count() for post in posts)


Используйте annotate:


from django.db.models import Count

posts = Post.objects.annotate(total_likes=Count("likes"))

Это выполнится на стороне базы, а не в Python, что намного быстрее.

4️⃣ Используйте exists() вместо count()
Если вам нужно проверить, есть ли записи в базе, не используйте count(), это дорогостоящий запрос:


if User.objects.filter(email="test@example.com").exists(): # Быстро


❌ Плохо:


if User.objects.filter(email="test@example.com").count() > 0: # Долго


5️⃣ Кешируйте запросы
Django поддерживает кеширование, и если запросы повторяются, можно использовать:


from django.core.cache import cache

users = cache.get("users")
if not users:
users = list(User.objects.all()) # Загружаем пользователей
cache.set("users", users, timeout=60 * 15) # Кешируем на 15 минут


Эти простые приемы помогут вам ускорить Django-приложение и уменьшить нагрузку на базу данных. А вы уже используете их в своих проектах? Делитесь в комментариях! 👇

👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Вклад «МКБ. Перспектива». Ставка 23% на 6 месяцев

Ставка 23% на 6 месяцев при покупках по карте МКБ от 10 000 ₽.
👍Надежный банк из ТОП-10
📅Выбирайте срок, на который хотите открыть вклад
✅Деньги застрахованы

Оформите карту, чтобы открывать любые счета или вклады и управлять ими в приложении 24/7

Перейти на сайт

Финансовые услуги оказывает: ПАО "МОСКОВСКИЙ КРЕДИТНЫЙ БАНК".

#реклама 16+
mkb.ru

О рекламодателе

Читать полностью…

Библиотека Python разработчика | Книги по питону

Модуль io предоставляет два типа файловых объектов в памяти. Такие объекты могут быть полезны для работы с интерфейсами, которые поддерживают только файлы, без необходимости создавать их на диске. Очевидный пример — модульное тестирование.

Эти два типа — BytesIO и StringIO, которые работают соответственно с байтами и строками.


from io import StringIO

f = StringIO()
f.write('first\n') # Вывод: 6
f.write('second\n') # Вывод: 7
f.seek(0) # Вывод: 0
print(f.readline()) # Вывод: 'first\n'
print(f.readline()) # Вывод: 'second\n'


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Если вам нужно итерироваться по нескольким итерируемым объектам одновременно, функция zip может быть хорошим выбором. Она возвращает генератор, который выдаёт кортежи, содержащие по одному элементу из каждого исходного итерируемого объекта:


In : eng = ['one', 'two', 'three']
In : ger = ['eins', 'zwei', 'drei']
In : for e, g in zip(eng, ger):
...: print('{e} = {g}'.format(e=e, g=g))
...:
one = eins
two = zwei
three = drei


Обратите внимание, что zip принимает итерируемые объекты как отдельные аргументы, а не список аргументов.
Для распаковки значений можно использовать оператор *:


In : list(zip(*zip(eng, ger)))
Out: [('one', 'two', 'three'), ('eins', 'zwei', 'drei')]


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

list позволяет хранить массив из любых объектов. Это довольно удобно, но может быть неэффективно. Для компактного представления массивов базовых значений можно использовать модуль array. Поддерживаемые значения включают различные типы C, такие как char, int, long, double и другие. Фактическое представление определяется реализацией C.


import array

a = array.array('B') # Создаем массив байтов
a.append(240)
a.append(159)
a.append(144)
a.append(180)

print(a.tobytes().decode('utf8')) # Выводит: '🐴'


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Погрузиться в сферу Data Science и освоить профессию инженера данных поможет одногодичная онлайн-программа магистратуры специализированного высшего образования «Инженерия данных» НИТУ МИСИС.

Преимущества программы:

✔️ полное погружение в Data Science с помощью онлайн-занятий
✔️практическое обучение от экспертов индустрии и ведущих преподавателей МИСИС
✔️освоите разработку архитектурных IT-решений по подготовке и трансформации данных для решения задач любого бизнеса
✔️ на старте обучения сможете выбрать свой трек специализации: «Python-разработчик», «Инженерия данных» или «Машинное обучение»
✔️ диплом одного из ведущих технических вузов России

Готов изменить будущее? Начни готовиться к сдаче вступительного испытания уже сейчас с помощью подготовительного онлайн-курса. Переходи по ссылке и пройди простую регистрацию. Подробная информация о программе на нашем сайте. Подписывайся на Телеграм-канал "Онлайн-обучение | МИСИС", чтобы быть в курсе новостей.

Читать полностью…

Библиотека Python разработчика | Книги по питону

Чтобы отсортировать последовательность в Python, используйте sorted:


In : sorted([1, -1, 2, -3, 3])
Out: [-3, -1, 1, 2, 3]


С помощью аргумента key можно передать функцию, которая будет использоваться для получения ключа сравнения для каждого значения. Например, отсортируем ту же последовательность по абсолютным значениям:


In : sorted([1, -1, 2, -3, 3], key=abs)
Out: [1, -1, 2, -3, 3]


Допустим, нам также нужно, чтобы числа с одинаковым абсолютным значением были расположены в порядке возрастания. В этом случае можно передать кортеж в качестве ключа сравнения:


In : sorted([1, -1, 2, -3, 3], key=lambda x: (abs(x), x))
Out: [-1, 1, 2, -3, 3]


Это не магия сортировки, а стандартное поведение кортежей в Python:


In : (1, 2) == (1, 2)
Out: True

In : (1, 2) > (1, 1)
Out: True

In : (1, 2) < (2, 1)
Out: True


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

«Reduce» — это функция высшего порядка, которая рекурсивно обрабатывает итерируемый объект, применяя некоторую операцию к следующему элементу и уже вычисленному значению. Также вы можете знать её под названиями «fold», «inject», «accumulate» или другими.

Использование reduce с result = result + element даёт сумму всех элементов, result = min(result, element) возвращает минимум, а result = element позволяет получить последний элемент последовательности.

В Python функция reduce доступна (начиная с Python 3, она была перемещена в functools.reduce):


from functools import reduce

print(reduce(lambda s, i: s + i, range(10))) # 45
print(reduce(lambda s, i: min(s, i), range(10))) # 0
print(reduce(lambda s, i: i, range(10))) # 9


Также, если вам нужны простые лямбда-функции, такие как lambda a, b: a + b, в Python есть модуль operator, который упрощает их использование:


from operator import add
print(reduce(add, range(10))) # 45


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Хотите быстрее закончить ремонт?

Покупка новой мебели для дома в одном месте сэкономит время и нервы.

«Мария» предлагает кухни, шкафы, диваны и аксессуары для уютного интерьера.

Подписывайтесь на их Telegram-канал для вдохновения и полезной информации:
- Краштесты для выбора материалов.
- Тренды интерьерной моды.
- Лайфхаки для уюта и ухода за мебелью.
- Бесплатный гайд по стилям.
- Информация об акциях.

Подпишитесь на Telegram-канал «Марии», чтобы вдохновляться и узнавать массу полезной информации.


Подписаться

#реклама
О рекламодателе

Читать полностью…

Библиотека Python разработчика | Книги по питону

Подборка Telegram каналов для программистов

Системное администрирование 📌
/channel/sysadmin_girl Девочка Сисадмин
/channel/srv_admin_linux Админские угодья
/channel/linux_srv Типичный Сисадмин

/channel/linux_odmin Linux: Системный администратор
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux

1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus

Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах

GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
/channel/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
/channel/game_devv Все о разработке игр

Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов

БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика

Шутки программистов 📌
/channel/itumor Шутки программистов

Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров

Английский 📌
/channel/UchuEnglish Английский с нуля

Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
/channel/Excel_lifehack

/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)

Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT

Читать полностью…

Библиотека Python разработчика | Книги по питону

Иногда вам нужно очистить коллекцию в Python. Вы, вероятно, используете что-то вроде d = {} (для словарей), но на самом деле это не очистка, а создание новой коллекции и выбрасывание старой. Это может сработать для вас, но другие владельцы того же объекта всё ещё будут иметь ссылку на оригинальный.

Правильный способ очистки словаря, множества, deque и других коллекций — вызвать x.clear().

👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

С версии Python 3.0 выбрасывание исключения внутри блока except автоматически добавляет перехваченное исключение в атрибут __context__ нового исключения. Это приводит к тому, что оба исключения отображаются в traceback:


try:
1 / 0
except ZeroDivisionError:
raise ValueError('Zero!')


Результат выполнения:


Traceback (most recent call last):
File "test.py", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "test.py", line 4, in <module>
raise ValueError('Zero!')
ValueError: Zero!


Вы также можете добавить __cause__ к любому исключению с помощью выражения raise ... from:


division_error = None

try:
1 / 0
except ZeroDivisionError as e:
division_error = e

raise ValueError('Zero!') from division_error


Результат выполнения:


Traceback (most recent call last):
File "test.py", line 4, in <module>
1 / 0
ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "test.py", line 8, in <module>
raise ValueError('Zero!') from division_error
ValueError: Zero!


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Как ускорить Python-код в 5 раз без Cython и Numba? 🚀

Сегодня я покажу вам, как можно ускорить выполнение Python-кода в 5 раз, не прибегая к сложным инструментам типа Cython или Numba. Всё, что нам понадобится, – это грамотная работа с multiprocessing.

Проблема:
Допустим, у нас есть функция, которая выполняет вычисления для каждого элемента списка:


import time

def slow_function(x):
time.sleep(1) # Симуляция долгих вычислений
return x * x

data = [1, 2, 3, 4, 5]
results = [slow_function(x) for x in data]
print(results)


Этот код выполняется 5 секунд, потому что вычисления идут последовательно.



Решение: multiprocessing.Pool

Используем multiprocessing, чтобы запустить вычисления параллельно:


from multiprocessing import Pool

with Pool() as pool:
results = pool.map(slow_function, data)

print(results)


Теперь код выполняется всего 1 секунду! 🎉

✅ Python автоматически распределяет вычисления по ядрам процессора
✅ Код остаётся читаемым и простым
✅ Работает во всех системах (но в Windows нужен if name == "__main__")



Итоги:
- Используйте multiprocessing.Pool для CPU-интенсивных задач
- Это легко и быстро внедряется в существующий код
- Безопасный способ ускорения без Cython и Numba

А какие ещё способы ускорения Python-кода вы знаете? Делитесь в комментариях! 👇

👉 @BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

⚡️ В сети начали массово сливать курсы и книги известных онлайн школ по айти

Вот отсортированная база с тонной материала (постепенно пополняется):

БАЗА (4687 видео/книг):

(363 видео, 87 книги) — Python
(415 видео, 68 книги) — Frontend
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++
(343 видео, 87 книги) — Java
(176 видео, 32 книги) — Git
(293 видео, 63 книги) — C#
(174 видео, 91 книги) — DevOps
(167 видео, 53 книги) — PHP
(227 видео, 83 книги) — SQL/БД
(163 видео, 29 книги) — Linux
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(137 видео, 93 книги) — DS/ML
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(129 видео, 73 книги) — QA
(213 видео, 63 книги) — Rust
(121 видео, 24 книги) — 1С
(136 видео, 33 книги) — PM/HR


Скачивать ничего не нужно — все выложили в Telegram

Читать полностью…

Библиотека Python разработчика | Книги по питону

Дарим подписку на Яндекс Музыку

Ответьте на 1 вопрос и Яндекс Музыка для вас и 3-х ваших близких 30 дней бесплатно.
Кинопоиск и Яндекс Книги тоже в подписке.
Попробуйте сейчас❤️

Попробовать

#реклама 18+
music.yandex.ru

О рекламодателе
Реклама на Яндексе

Читать полностью…

Библиотека Python разработчика | Книги по питону

Оптимизация кода с помощью генераторов в Python

Сегодня хочу показать вам, как использование генераторов может сделать ваш код быстрее, экономнее по памяти и элегантнее.

Что такое генераторы?
Генераторы — это функции, которые используют yield вместо return. Они не возвращают сразу все значения, а запоминают своё состояние и отдают результат по мере необходимости. Это особенно полезно при обработке больших объемов данных, так как позволяет не загружать всю информацию в память сразу.

Пример: экономия памяти
Допустим, нам нужно обработать миллион чисел и взять из них только четные. Обычный способ:


def get_even_numbers(n):
result = []
for i in range(n):
if i % 2 == 0:
result.append(i)
return result

numbers = get_even_numbers(10**6)
print(len(numbers)) # 500000


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

А теперь переделаем на генератор:


def get_even_numbers_gen(n):
for i in range(n):
if i % 2 == 0:
yield i

numbers = get_even_numbers_gen(10**6)
print(sum(1 for _ in numbers)) # 500000


Здесь список не создается, а элементы выдаются по одному. Это экономит память и ускоряет обработку!

Где применять?
✔️ Чтение больших файлов построчно (yield line)
✔️ Работа с потоками данных
✔️ Генерация последовательностей без создания списков


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Python поддерживает несколько способов запуска скрипта. Обычный вариант — это python foo.py; в этом случае foo.py просто выполняется.

Однако, можно также использовать python -m foo. Если foo — это не пакет, то foo.py ищется в sys.path и выполняется. Если это пакет, то Python сначала выполняет foo/__init__.py, а затем foo/__main__.py. Обратите внимание, что во время выполнения __init__.py значение __name__ равно foo, но во время выполнения __main__.py оно равно __main__.

Можно также запустить Python с каталогом: python dir/ или даже python dir.zip. В этом случае Python ищет dir/__main__.py и выполняет его, если находит.

Пример:


$ ls foo
__init__.py __main__.py
$ cat foo/__init__.py
print(__name__)
$ cat foo/__main__.py
print(__name__)

$ python -m foo
foo
__main__
$ python foo/
__main__
$ python foo/__init__.py
__main__


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Вебинар по защите веб-приложений. UserGate WAF

Приглашаем вас на вебинар, где узнаете, какие задачи решает и как защищает веб-приложения от современных угроз — UserGate WAF.

На вебинаре вы узнаете:
- Какие задачи решает UserGate WAF.
- Как использование продукта поможет защитить ваши веб-приложения от современных угроз.
- О подходах к разработке продукта и формировании экспертизы в этой области.

⚡Регистрация на вебинар уже открыта.

Зарегистрироваться

#реклама 16+
webinar.usergate.com

О рекламодателе

Читать полностью…

Библиотека Python разработчика | Книги по питону

.

Наконец, в телеграм появился канал с полезными идеями для дачи

✅Советую подписаться!- t.me/+Rn34QSUxwLs5NGUy
Ссылочка активна 24ч.

✅Всего 1 ложка этого секретного натурального удобрения–и клубнику будете собирать вёдрами- t.me/+Rn34QSUxwLs5NGUy

✅Всего за суткu это средство выжжет все сорняки вместе с корнями- t.me/+GsFWrqhdMAs1OTAy

✅Грядки будут совершенно без сорняков если использовать специальное средство, которое даёт защиту от сорняков на весь сезон- t.me/+deq8ZFlMjZkzYjIy

✅Как превратить чахнущий спатифиллюм в цветущий куст?-t.me/+KDlBS89PaKQ4YjFi

Всего 3 гравных правила и ваш замиокулькас будет выпускать новую веточку каждый месяц,а то и не одну- t.me/+5bE7B4HtfmxkZjVi

Три удобрения,которые превращают хилую герань в цветущий куст- t.me/+2rBjZhJ90DUxYzE6

Играть

#реклама
О рекламодателе

Читать полностью…

Библиотека Python разработчика | Книги по питону

Когда в Python используется переменная, сначала она ищется в текущей области видимости. Если такая переменная не найдена, поиск продолжается во вложенной области. Это повторяется до тех пор, пока не будет достигнуто глобальное пространство имен.


x = 1
def scope():
x = 2
def inner_scope():
print(x) # выводит 2
inner_scope()
scope()


Однако присваивание переменной работает иначе. Новая переменная всегда создается в текущей области видимости, если не указано global или nonlocal:


x = 1
def scope():
x = 2
def inner_scope():
x = 3
print(x) # выводит 3
inner_scope()
print(x) # выводит 2
scope()
print(x) # выводит 1


global позволяет использовать переменные из глобального пространства имен, а nonlocal ищет переменную в ближайшей окружающей области видимости. Сравните:


x = 1
def scope():
x = 2
def inner_scope():
global x
x = 3
print(x) # выводит 3
inner_scope()
print(x) # выводит 2
scope()
print(x) # выводит 3



x = 1
def scope():
x = 2
def inner_scope():
nonlocal x
x = 3
print(x) # выводит 3
inner_scope()
print(x) # выводит 3
scope()
print(x) # выводит 1


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Создание новой переменной в Python фактически означает создание нового имени для уже существующего объекта. Именно поэтому этот процесс называется связыванием имени (name binding).

Существует множество способов связать имя с объектом. Вот примеры того, как можно связать x:


x = y # Присваивание
import x # Импорт модуля
class x: pass # Определение класса
def x(): pass # Определение функции
def y(x): pass # Определение аргумента функции
for x in y: pass # Перебор элементов в цикле
with y as x: pass # Использование в конструкции with
except y as x: pass # Обработка исключения


Также можно привязать имя к объекту, манипулируя глобальным пространством имен:


In : x
NameError: name 'x' is not defined # Ошибка: переменная x не определена

In : globals()['x'] = 42 # Присваивание через globals()
In : x
Out: 42 # Теперь x привязан к 42


Однако нельзя сделать то же самое с locals(), так как изменения словаря locals() игнорируются.

👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Платежи через Robokassa за 0₽. Автоматические чеки

Бесплатное подключение. Один договор на всё. Готовая интеграция с сайтом, VK, TG

Перейти на сайт

Финансовые услуги оказывает: ПАО "Промсвязьбанк", АО НКО "Платежи и расчет".

#реклама
robokassa.com

О рекламодателе

Читать полностью…

Библиотека Python разработчика | Книги по питону

CPython поддерживает два уровня оптимизации. Вы можете включить их с помощью флагов -O и -OO.

- Флаг -O устанавливает __debug__ в значение False и удаляет все операторы assert из программы.
- Флаг -OO делает то же самое, а также удаляет строки документации (docstrings).

Обычная версия скрипта кэшируется в файл .pyc, а оптимизированная версия раньше кэшировалась в файл .pyo. Однако, начиная с Python 3.5, файлы .pyo больше не используются. Вместо них, в соответствии с PEP 488, вводятся файлы .opt-1.pyc и .opt-2.pyc.

👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Иногда вам может понадобиться проверить синтаксис Python-файла без его запуска. Такая простая проверка может быть полезна, например, в качестве хука перед коммитом или быстрой проверки в рамках непрерывной интеграции (CI).

Прямого способа сделать это нет. Вы можете запустить файл с помощью команды python -m module.py, что предотвратит выполнение блока if __name__ == '__main__'. Однако все импорты всё равно будут выполнены, и это может привести к ошибкам, если вы хотите проверить синтаксис в среде, где модуль не может и не должен быть запущен.

Тем не менее, стандартная библиотека Python содержит модуль py_compile, который генерирует байт-код из исходного файла Python без его выполнения. Это именно то, что нам нужно:


$ python -m py_compile test.c
File "test.c", line 1
int main() {
^
SyntaxError: invalid syntax


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Студия в Краснодаре за 18 203 р/мес. МКР Родные просторы

Жилой комплекс "Родные Просторы" в Краснодаре - это масштабный проект группы компаний ТОЧНО, который предлагает уникальные условия для комфортной жизни.

"Родные просторы" - это не просто квартиры, это целый микрорайон, созданный с учетом потребностей современных семей. Здесь предусмотрены разнообразные планировки и высококачественная отделка, что позволяет каждому выбрать идеальное жильё.

✨Уникальное предложение этого месяца - студия за 18 203 рублей в месяц.

Узнать больше

Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО СЗ ЮГСТРОЙИМПЕРИАЛ. Финансовые услуги оказывает: ПАО "Сбербанк", АО "АЛЬФА-БАНК" и др..

#реклама
promo.tochno-rp.ru

О рекламодателе

Читать полностью…

Библиотека Python разработчика | Книги по питону

В Python множества поддерживают операторы сравнения, где a < b означает, что a является подмножеством b:


>>> {1} < {1, 2}
True
>>> {1} < {2, 3}
False


Это означает, что множества частично упорядочены, то есть существуют такие a и b, что и a < b, и b < a — ложны:


>>> {1} < {2, 3}
False
>>> {1} > {2, 3}
False


Некоторые функции, такие как min, max и sorted, требуют полного порядка, поэтому их применение к списку множеств может дать неожиданные результаты:


>>> min([{1}, {2}])
{1}
>>> min([{2}, {1}])
{2}


👉@BookPython

Читать полностью…

Библиотека Python разработчика | Книги по питону

Прямой доступ к атрибутам объекта может быть не самой лучшей идеей. Если клиенты взаимодействуют с объектом через методы, вы всегда можете изменить способ обработки каждого запроса, в то время как при прямом доступе к атрибутам это может быть невозможно.

Разные языки решают эту проблему по-разному. В Ruby синтаксически невозможно получить прямой доступ к атрибуту: obj.x — это вызов метода x. В Java рекомендуется делать все атрибуты приватными и писать тривиальные геттеры, например: public int getX() { return this.x; }.

Python предлагает решение, которое в некотором роде похоже на то, что есть в Ruby. Вы можете определить свойство (`property`), чтобы obj.x вызывал метод вместо прямого возврата атрибута x.


class Example:
def __init__(self, x):
self._x = x

@property
def x(self):
return self._x


👉@BookPython

Читать полностью…
Subscribe to a channel