Библиотека питониста | 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
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
Как создать приложение с графическим интерфейсом Python с помощью wxPython

- Начало работы с wxPython
- Определение GUI
- Создание скелетного приложения
- Создание рабочего приложения

#статьядня

https://prglb.ru/22iq4
Будущие питонисты и те, кто уже вышел на этот тернистый путь)
У нас появился канал с вакансиями специально для Вас!
Подписывайтесь и следите за обновлениями, а мы постараемся радовать Вас только самыми свежими и интересными предложениями на рынке!

Ждем Вас здесь: @pydevjob
Библиотека питониста | Python, Django, Flask pinned «Будущие питонисты и те, кто уже вышел на этот тернистый путь) У нас появился канал с вакансиями специально для Вас! Подписывайтесь и следите за обновлениями, а мы постараемся радовать Вас только самыми свежими и интересными предложениями на рынке! Ждем…»
#codeexample

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

In [1]: def echo(*args):
   ...:     return args
   ...:
In [2]: a, = echo(1)
In [3]: a
Out[3]: 1
In [4]: a, = echo(1, 2)

...
ValueError: too many values to unpack (expected 1)

Это решение автоматически распаковывает этот единственный элемент в переменную, что может быть хорошо, а может и не быть.
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Направляется уведомление о внесении в «Единый реестр доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено» следующего(их) указателя (указателей) страницы (страниц) сайта в сети «Интернет»: https://proglib.io/p/wifi-hack/ .
itertools.combinations

itertools – впечатляющий модуль. У него так много разных методов, позволяющих экономить время. Есть даже репозиторий GitHub, содержащий ещё больше подобных инструментов.

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

Давайте посмотрим на метод combinations. Он принимает в качестве аргументов итерируемый объект и целое число. В результате получаем генератор, состоящий из всех возможных комбинаций итерируемого объекта. Максимальная длина последовательности равна указанному целому числу. Сочетания не дублируются:

import itertools

list(itertools.combinations([1, 2, 3, 4], 2))

[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
​​Небольшая полезность для Вас, друзья!

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