Библиотека Python разработчика | Книги по питону (@bookpython) के नवीनतम पोस्ट टेलीग्राम पर

Библиотека Python разработчика | Книги по питону टेलीग्राम पोस्ट

Библиотека Python разработчика | Книги по питону
Полезные материалы для питониста по Фреймворкам Django, Flask, FastAPI, Pyramid, Tornado и др.

По всем вопросам @evgenycarter

№ 4869337666
19,746 सदस्य
1,126 तस्वीरें
392 वीडियो
अंतिम अपडेट 11.03.2025 07:51

Библиотека Python разработчика | Книги по питону द्वारा टेलीग्राम पर साझा की गई नवीनतम सामग्री

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

16 Feb, 07:58

2,164

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 разработчика | Книги по питону

14 Feb, 06:26

2,413

Модуль 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 разработчика | Книги по питону

12 Feb, 08:13

2,831

Если вам нужно итерироваться по нескольким итерируемым объектам одновременно, функция 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 разработчика | Книги по питону

10 Feb, 06:18

2,604

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 разработчика | Книги по питону

09 Feb, 17:26

2,383

Когда в 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 разработчика | Книги по питону

07 Feb, 11:34

2,339

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

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

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

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

07 Feb, 10:50

2,011

Создание новой переменной в 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 разработчика | Книги по питону

07 Feb, 07:41

2,183

Чтобы отсортировать последовательность в 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 разработчика | Книги по питону

05 Feb, 09:10

2,372

«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 разработчика | Книги по питону

03 Feb, 05:51

2,678

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

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

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

👉@BookPython