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

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

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

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

По рекламе: @proglib_adv
РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
Download Telegram
Упрощаем разработку: асинхронные функции Python

Хотите программировать на Python асинхронно? Испытываете проблемы с многопоточностью? Расскажем, как использовать асинхронные функции в Python.

#статьядня

https://prglb.ru/1apjz
Если вы хотите перебрать несколько итераций одновременно, вы можете использовать функцию zip (она не имеет ничего общего с форматом файла ZIP):

#codeexample

from datetime import timedelta

names = [
    'Eleven. Return and Revert',
    'Wilderness',
    'The Menagerie Inside',
    'Evaporate',
]

years = [
    2010,
    2013,
    2015,
    2018,
]

durations = [
    timedelta(minutes=57, seconds=38),
    timedelta(minutes=48, seconds=5),
    timedelta(minutes=46, seconds=34),
    timedelta(minutes=43, seconds=25),
]

print('Midas Fall LPs:')
for name, year, duration in zip(
    names, years, durations
):
    print(f'  * {name} ({year}) — {duration}')

Output:

Midas Fall LPs:
  * Eleven. Return and Revert (2010) — 0:57:38
  * Wilderness (2013) — 0:48:05
  * The Menagerie Inside (2015) — 0:46:34
  * Evaporate (2018) — 0:43:25
​​В SkillFactory стартует онлайн-марафон Python
для анализа данных
, который гарантирует получение знаний.

Как это работает?
1. Оплатите невозвратную часть обучения за участие — 2 900 руб.
2. Выполняйте задания в установленные сроки.
3. Оплачивайте курс частями, с возможностью вернуть деньги.
4. Завершите курс с оценкой не менее установленного количества баллов.
5. Верните деньги за свое обучение.

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

Старт – 16 октября, забронируйте место уже сейчас: https://clc.to/wR1ijg
Интересные новые функции в Python 3.8

Из данной статьи вы узнаете:
-Как использовать выражение присваивания для упрощения некоторых конструкций кода
-Как применять positional-only аргументы в ваших собственных функциях
-Указание более точных подсказок типа
-Как использовать f-строки для более простой отладки

#статьядня

https://prglb.ru/1w9fd
Python Back-end Developer в GOSU.AI
от 1500-2200 EUR, повышение ЗП после переезда.
Full-time удаленно, дальнейшая релокация в Вильнюс (компания помогает в получением европейского ВНЖ).

➡️ Подробности: https://www.notion.so/gosu/Python-Back-end-Developer-6e9681e1e0244b8795a08d395b097d59
#codeexample

Если вы хотите создать словарь из известного набора ключей и некоторого фиксированного значения для всех из них, вы можете использовать словарные выражения:

>>> keys = ['a', 'b', 'c']
>>> {k: True for k in keys}
{'a': True, 'b': True, 'c': True}

Однако, у класса dict есть метод класса fromkeys, разработанный специально для этого случая:

>>> dict.fromkeys(keys, True)
{'a': True, 'b': True, 'c': True}

Вы можете добавлять символы Юникода в строковый литерал не только по его номеру, но и по его имени.

>>> '\N{EM DASH}'
'—'
>>> '\u2014'
'—'

Это также совместимо с f-strings:

>>> width = 800
>>> f'Width \N{EM DASH} {width}'
'Width — 800'
10 советов о том, как научить ребенка программировать на Python
10 педагогических советов и 3 книги для тех, кто хочет помочь ребенку научиться программировать на Python.

#статьядня

https://prglb.ru/2ju06
#codeexample

f-строки позволяют указать ширину для печатаемого значения, а также другие спецификаторы формата:

>>> x = 42
>>> f'{x:5}+{x:15f}'
' 42+ 42.000000'

Они также могут содержать оцененные выражения, которые могут быть полезны, когда ширина неизвестна заранее:

def print_table(matrix):
cols_width = [
max(len(str(row[col])) for row in matrix)
for col in range(len(matrix[0]))
]

for row in matrix:
for i, cell in enumerate(row):
print(
f'{cell:{cols_width[i]}} ',
end=''
)
print()

albums = [
['Eleven. Return and Revert', 2010],
['Wilderness', 2013],
['The Menagerie Inside', 2015],
['Evaporate', 2018],
]

print_table(albums)

На выходе:

Eleven. Return and Revert 2010
Wilderness 2013
The Menagerie Inside 2015
Evaporate 2018
Python sleep(): как добавить временные задержки в ваш код

Из данной статьи вы узнаете, как добавить вызовы Python sleep () с помощью:
time.sleep ()
Декораторов
Потоков
Async IO
GUI

#статьядня

https://prglb.ru/a9s3
Новые крутые Features в Python 3.8

Что принес Python 3.8?  Документация дает хороший обзор новых функций.  Тем не менее, эта статья более подробно расскажет о некоторых самых значительных изменениях и покажет, как вы можете использовать преимущества Python 3.8.

#статьядня

https://prglb.ru/1w9fd
Redis в Python — Полная документация на примерах

В данном руководстве вы узнаете, как использовать Python с Redis. Redis является высокопроизводительным хранилищем ключей, отличается высокой скоростью работы и широтой областей применения.

#статьядня

https://prglb.ru/4jgvy
Poco — UI автоматизация мобильных игр на основе Python в рамках AirTest IDE

Poco — фреймворк UI автоматизации игр использующий Python в рамках AirTest IDE с возможностью комбинирования функциональности с их же Image Recognition фреймворком (AirTest).

#статьядня

https://prglb.ru/1uywx
Введение в функциональное программирование с примерами на Python

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

#статьядня

https://prglb.ru/167yy
Скрапинг 180 тысяч продуктов класса «Люкс» с помощью Python

В данной статье рассказывается, как найти незадокументированное API на FarFetch и создать пакет Python с тремя инструментами: Firefox Web Developer, Requests & Pandas.

#статьядня

https://prglb.ru/4m435
Python и быстрые HTTP-клиенты

Существует множество HTTP-клиентов для Python. Самым распространённым и легким в работе можно назвать requests. Сегодня этот клиент является стандартом де-факто. О нем и поговорим в данной статье

#статьядня

https://prglb.ru/3jaz4
BeautifulSoup – парсинг HTML в Python на примерах

Данная инструкция по BeautifulSoup является вводным руководством по использованию библиотеки BeautifulSoup Python. В примерах показано использование тегов, модификация документа и перебор его элементов, а также парсинг веб-страниц.

#статьядня

https://prglb.ru/4n39g
Python глазами нейрофизиологов

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

#видеодня

https://prglb.ru/1ag37
Сглаживание в Python

Приведенные ниже методы сглаживают потенциально глубокий список с помощью рекурсии

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

def spread(arg):
ret = []
for i in arg:
if isinstance(i, list):
ret.extend(i)
else:
ret.append(i)
return ret

def deep_flatten(xs):
flat_list = []
[flat_list.extend(deep_flatten(x)) for x in xs] if isinstance(xs, list) else flat_list.append(xs)
return flat_list


deep_flatten([1, [2], [[3], 4], 5]) # [1,2,3,4,5]
__init__ позволяет изменить объект сразу после создания. Если вы хотите контролировать то, что уже создано, используйте __new__:

#codeexample

from typing import Tuple, Dict
from cached_property import cached_property

class Numbers:
_LOADED: Dict[Tuple[int, ...], 'Numbers'] = {}

def __new__(cls, ints: Tuple[int, ...]):
if ints not in cls._LOADED:
obj = super().__new__(cls)
cls._LOADED[ints] = obj

return cls._LOADED[ints]

def __init__(self, ints: Tuple[int, ...]):
self._ints = ints

@cached_property
def biggest(self):
print('calculating...')
return max(self._ints)

print(Numbers((4, 3, 5)).biggest)
print(Numbers((4, 3, 5)).biggest)
print(Numbers((4, 3, 6)).biggest)