Библиотека питониста | Python, Django, Flask
40.5K subscribers
2.78K photos
75 videos
51 files
4.36K links
Все самое полезное для питониста в одном канале.

Список наших каналов: https://t.me/proglibrary/9197

Курс по ML: https://cl

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
Как оценить время, необходимое на разработку
Заметили, что постоянно срываете сроки сдачи проекта? Скорее всего, вы просто не можете правильно оценить время, которое требуется на разработку.

#статьядня

https://prglb.ru/3y4ym
Этот учебник проведет вас через регулярные выражения Python (RegEx)
Рассмотрена каждая мелочь, чтобы сделать эту тему проще. Синтаксис, используемый здесь, предназначен для Python 3. Вы можете изменить его для использования с другими версиями Python.

#полезностьдня

https://prglb.ru/2spom
Python Junior подкаст. Разбираем код мини-блога Flaskr

#видеодня

https://prglb.ru/5u6ms
#codeexample

Несмотря на то, что язык программирования Python с динамической типизацией, бывают случаи, когда нужно проверить тип элемента:

<type> = type(<el>) # <class 'int'> / <class 'str'> / ...
from numbers import Integral, Rational, Real, Complex, Number
<bool> = isinstance(<el>, Number)
Pipenv: будущее управления зависимостями в Python
Этот доклад посвящен истории создания пакетов Python, инструментам, которые были исторически доступны для развертывания приложений, проблемам / ограничениям, представленным ими, и представляет собой целостное решение многих из этих проблем: Pipenv.

Speaker: Kenneth Reitz

https://prglb.ru/51s6g
Как Вам, наверняка, известно, инструменты Python поддерживают функциональное программирование

#полезностьдня

Применяем функцию к каждому элементу последовательности:
<iter> = map(lambda x: x + 1, range(10)) # (1, 2, ..., 10)

Отфильтруем элементы последовательности, которые больше 5:
<iter> = filter(lambda x: x > 5, range(10)) # (6, 7, 8, 9)

Следующая функция вычисляет сумму элементов последовательности:
from functools import reduce
<int> = reduce(lambda out, x: out + x, range(10)) # 45
Flask Web Development
Автор: Мигель Гринберг

Автор книги познакомит вас с основным функционалом и структурой фреймворка, продемонстрировав это на создании законченного приложения социального блогинга.

#книгадня

Примеры:
https://prglb.ru/3ppwv

Скачать книгу:
https://t.me/progbook/2396
29 Python-проектов, оказавших огромное влияние на разработку
Пишете код на Python? Собрали для вас подборку полезных Python-проектов, которые спасали разработчиков на протяжении 2018 года.

#статьядня

https://prglb.ru/4jjlq
#codeexample

Разработчики Python обычно инициализируют словарь по-разному:

foo = {}
foo = dict()


Безусловно, результат тот же, но давайте погрузимся глубже:

timeit.timeit('{}', number=10**8)
2.65754420599842
timeit.timeit('dict()', number=10**8)
6.245466648993897


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

dis.dis('foo={}')
1 0 BUILD_MAP 0
2 STORE_NAME 0 (foo)
4 LOAD_CONST 0 (None)
6 RETURN_VALUE
dis.dis('foo=dict()')
1 0 LOAD_NAME 0 (dict)
2 CALL_FUNCTION 0
4 STORE_NAME 1 (foo)
6 LOAD_CONST 0 (None)
8 RETURN_VALUE


Ответ очевиден - всякий раз, когда вы предпочитаете dict () вместо {}, вы теряете дополнительное время на вызов избыточной функции.
Но в большинстве приложений на Python это не имеет значения, потому что мы имеем дело с микросекундами. Во всяком случае - имейте в виду.
​​С 11 по 29 марта пройдет серия бесплатных онлайн-конференций по программированию. Ведущие специалисты страны поделятся своими знаниями и секретами.

Регистрация уже началась 👉 https://goo.gl/t1bhNG

Узнай о том, как:
✔️ правильно выбрать язык программирования;
✔️ программировать на Python, Java, C#;
✔️ создать сайт;
✔️ написать приложение и др.

Успей присоединиться — количество бесплатных мест ограничено!
PyTorch является одним из основных инструментов, используемых в наши дни для изучения машинного обучения. Он разрабатывался в бета-режиме уже более 2 лет, но в октябре этого года был выпущен кандидат на выпуск версии 1.0! В этом выступлении автор кратко представит библиотеку, а затем перейдет к демонстрации новейших функций.

#видеодня

EVENT: PyData Warsaw 2018
Speaker: Adam Paszke

https://prglb.ru/4swyq
​​Библиотека Matplotlib построена на принципах ООП, но имеет процедурный интерфейс pylab, который предоставляет аналоги команд MATLAB

#youtubeдня

https://prglb.ru/5ezs6
Когда вы пишете надежный код, тесты необходимы для проверки правильности, надежности и эффективности логики вашего приложения. Однако ценность ваших тестов зависит от того, насколько хорошо они демонстрируют эти критерии. Препятствия, такие как сложная логика и непредсказуемые зависимости, затрудняют написание ценных тестов. Библиотека фиктивных объектов Python, unittest.mock, может помочь вам преодолеть эти препятствия.

#статьядня

https://prglb.ru/3lsbb
👍1
#codeexample

Python 3.5+ позволяет передавать несколько наборов
аргументов ключевого слова («kwargs») для функции в пределах одного вызова, используя синтаксис «»:

def process_data(a, b, c, d):
print(a, b, c, d)
 x = {'a': 1, 'b': 2}
y = {'c': 3, 'd': 4}


process_data(**x, **y)
# 1 2 3 4


process_data(**x, c=23, d=42)
#1 2 23 42
​​​​The Quick Python Book
Автор: Naomi Ceder

Вместе с автором вы пройдёте путь от начинающего разработчика, изучив массивы, основы работы с функциями, регулярные выражения, а также базовые концепции объектно-ориентированного программирования.

#книгадня

Скачать книгу:
https://t.me/progbook/2626
​​Самый полный видеокурс по Django от установки до проекта
Занимательный видеокурс по Django на примере создания интернет-магазина.

#статьядня

https://prglb.ru/2vfep
Когда вы разветвляете свой процесс, случайное начальное число, которое вы используете, копируется между процессами. Это может привести к тому, что процессы будут давать одинаковый «случайный» результат.

Чтобы избежать этого, вы должны вручную вызывать random.seed() в каждом процессе.

Однако, если вы используете multiprocessing, он делает это за вас.

import multiprocessing
import random
import os
import sys
                            
def test(a):                       
    print(random.choice(a), end=' ')
                                   
# a = [1, 2, 3, 4, 5]

for _ in range(5):
    test(a)
print()

for _ in range(5):                 
    p = multiprocessing.Process(   
        target=test, args=(a,))
    p.start()                      
    p.join()                       
print()                            

for _ in range(5):
    pid = os.fork()
    if pid == 0:
        test(a)
        sys.exit()
    else:
        os.wait()
print()


# Результат:
4 4 4 5 5
1 4 1 3 3
2 2 2 2 2

Более того, если вы используете Python 3.7 или новее,  os.fork делает то же самое, благодаря новому хуку at_fork.

Вывод приведенного выше кода для Python 3.7:
1 2 2 1 5
4 4 4 5 5
2 4 1 3 1
​​Инструменты Python: лучшая шпаргалка для начинающих
Большая шпаргалка для питониста на любой случай. Рассмотрены основные инструменты Python с примерами. Осторожно: много кода!

#статьядня

https://prglb.ru/1gzq2
Управление несколькими версиями Python с помощью pyenv

Из данной статьи вы узнаете:
Установите несколько версий Python
Установите последнюю версию Python для разработки
Переключение между установленными версиями
Используйте виртуальные среды с pyenv
Активируйте разные версии Python и виртуальные среды автоматически

#статьядня

https://prglb.ru/j69v