Cool and Fun Python
540 subscribers
30 photos
8 videos
1 file
33 links
Крутой и весёлый Python. Случаи из практики и не только.
Download Telegram
Python non-stop.

Добрый день, дорогие друзья.

Сегодня, 23 июня в 20:00 по московскому времени состоится вебинар под руководством Антона Петрова на тему: Отношения с алхимией

На занятии мы рассмотрим темы:
1. Концепция алхимии;
2. Отношения в алхимии;
3. Выборка в алхимии.

Жду всех желающих разобраться в предметной области.

https://www.youtube.com/watch?v=hCZlZ9rWb2g

#видео #БД #SQLAlchemy
Скринкаст на тему: Алгоритм Дейкстры. Поиск кратчайшего пути в графе.
anonymous poll

Да, интересно. – 43
👍👍👍👍👍👍👍 100%

Нет, не интересно.
▫️ 0%

👥 43 people voted so far. Poll closed.
Скринкаст на тему: "Алгоритм Дейкстры. Поиск кратчайшего пути в графе" проведу в конце недели. Готовлю материал. Ссылку на трансляцию добавлю примерно за сутки.
Ссылка на обещанный минивебинар:
https://www.youtube.com/watch?v=BE5Xx6PXScs
Начало 04 августа в 10.00 по Москве.

#видео #алгоритмы #графы
Планы на утро субботы.
anonymous poll

Посмотреть скринкаст про алгоритм Декстры – 19
👍👍👍👍👍👍👍 50%

Заняться своими делами, а видео посмотрю в записи – 13
👍👍👍👍👍 34%

Много дел. Видео посмотрю когда-нибудь в светлом будущем – 6
👍👍 16%

👥 38 people voted so far. Poll closed.
Начинаем обходить граф точно по расписанию, через 10 минут.
Всем доброго утра и отличного настроения. Прокачаем мозги 😉
P.S. Ссылка на трансляцию находится чуть выше.
Всех, кто не знает или знал, но забыл - приглашаю на вебинар сегодня в 20.00
https://geekbrains.ru/go/Fmbnia
Channel photo updated
Сегодня отличный день, чтобы вернуть канал к жизни. Тем более историй за последние годы накопилось предостаточно.

В планах уйти от вебинаров (но не забрасывать их на совсем), добавить немного кода, историй... Чтобы было что почитать, поделиться с друзьями.

#intro
👍4
​​И вот вам история из практики преподавания.
Однажды студент пожаловался, что не может написать рабочую функцию. Попросив код, с лёгкостью запустил его в своей IDE. У меня работает. 🤔 Спустя почти час переписки со студентом, танцев с бубном вокруг проверок интерпретатора, IDE, переменных окружения, версий и прочих безумных гипотез, причина была найдена. Ответ на картинке. 😉

#истории #lifehack
😁4
А было что-то подобное ☝️ у вас?
Привет.
Поздравляю всех с Днём Победы. Счастья, радости, здоровья, мира и благополучия вам.

И ловите немного приветов миру 🕊
Традиционно изучение языка программирования начинают с вывода Hello world! И есть один классический способ для Python.
print('Hello world!')

Лично я знаю ещё парочку.
input('Hello world!')

И секретный способ.
import __hello__ 

У кого есть другие варианты, делитесь в комментариях. 😉

#познавательно
👍6🔥3
Что быстрее?
data_one = []
data_two = list()

Вопрос не про время набора, конечно же, а про время выполнения кода.
Ответ очевиден, если заглянуть под капот операции через модуль dis.
С квадратными скобками получаем:
  1           0 BUILD_LIST               0
2 STORE_NAME 0 (data_one)
4 LOAD_CONST 0 (None)
6 RETURN_VALUE

Функция list отработает чуть медленнее. Смотрите сами:
  1           0 LOAD_NAME                0 (list)
2 CALL_FUNCTION 0
4 STORE_NAME 1 (data_two)
6 LOAD_CONST 0 (None)
8 RETURN_VALUE

А если вам интересно продолжение этой истории, ставьте 👍 Тогда с меня подробные исследования в следующем выпуске.

#структуры_данных #познавательно
👍57🔥1
Продолжение истории про list() и [] оказалось длинным и с картинками. Пока решаю где её удобнее разместить. Продолжение однозначно следует...

А тем, кто недавно заглянул на огонёк сброшу ссылку на свой плейлист на YouTube. Если (а точнее когда) буду проводить вебинары, видео обязательно буду дублировать туда 👇

https://youtube.com/playlist?list=PL2Bb1BU5KbvphJCe7ZyOA611wXyRUQiux

#intro #видео
🔥5
Одна из историй преподавания или часть 1. Пара слов о рекурсии в Python

- Рекурсивный код предполагает вызов функцией самой себя.
Следовательно нам нужна функция
def func():

- Рекурсия обязана иметь базовый случай, когда она возвращает ответ. Без него получаем переполнение стека функций. А это страшнее зависания в бесконечном цикле 😈
Следовательно нам нужен
return result

- Вызов функцией самой себя должен упрощать задачу, приближать вычисления к базовому случаю.
Следовательно нам нужны передача аргументов
def func(*args, **kwargs):
и вызов себя с более простой задачей
return func(*spam, **eggs)

Собрав пункты вместе получим рекурсивный алгоритм. Например так можно считать сумму натуральных чисел от 1 до n через рекурсию:

def func(n):
if n == 1:
return n
return n + func(n - 1)


А если у вас не работает, ответ лежит 👉 тут 👈
👍6😁31🔥1
Одна из историй преподавания или часть 2. Пара слов про ленивые and и or в Python

Для повышения быстродействия при проверке условий в if, Python ленится, когда условий несколько в связке с and и/или or.

Вначале рассмотрим and.
True and True == True
True and False == False
False and True == False
False and False == False

А теперь читайте медленно слева направо. Замечаете? Если первым идёт False, то в итоге всегда будет False независимо от второго значения.

А теперь аналогичная "лень" для or.
True or True == True
True or False == True
False or True == True
False or False == False


В случае or если слева идёт True, то и в результате будет True.

Вывод. В 2-х случаях из 4-х проверки через and и or знают ответ заранее, не глядя на второе условие. Так зачем тратить вычисления.

if False and 2 + 2 == 4:
print("Этот текст никогда не будет выведен!")


Ленивый if помогает экономит ресурсы ☝️. Но новички легко наступают на грабли, не продумав все последствия 👇

if a > 0 or a / b > 1:
print("Текст")


В этом примере когда b = 0 получим ошибку деления на ноль. Но не всегда, а только если a <= 0.
👍8🔥2
Одна из историй преподавания или часть 3. Как благодаря ленивому and функция работает рекурсивно

def a(x):
return x and a(x - 1)


Перед нами квинтэссенция рекурсии и лени. При любом натуральном x функция рекурсивно досчитывает до нуля, который и возвращает.
1. Функция получает на вход натуральное число, например так print(a(5))
2. Происходит неявное преобразование целого числа 5 из int в логический True.
3. Функция переходит к проверке выражения после and и вызывает сама себя. Но число передаётся на единицу меньше.
4. Переходим к пункту 1.
4.1 В какой-то момент x уменьшается до нуля.
5 (он же новый п. 2). Происходит неявное преобразование целого числа 0 из int в логический False.
6. Ленивый if отказывается идти дальше and. Никакого нового вызова функции не происходит. Возвращается ноль.
7. Happy end и ответ в виде нуля при любом натуральном x на входе. Если конечно мы не переполняем стек вызова функций. Но это уже другая история... 😉
👍5👏52
Одна из историй преподавания или часть 4. Что за стек вызова функций из 1 и 3 части?

Каждый запуск функции кладёт на стек информацию о ней. Удаление информации происходит после завершения работы функции. И обычно стек почти пустой. Ведь даже в крутом выводе на печать списка уникальных элементов из введённой пользователем строки всего 6 функций максимально на стеке. 👇

print(list(set(map(str, input("Filter unique simbols: ")))))

С рекурсией ситуация хуже. Пример рекурсивного подсчёта суммы от 1 до n 👉 этот 👈 сломается на любом n больше ≈995. Стек не резиновый, ОЗУ не бесконечна. Стандартное ограничение в Python составляет 1000 элементов на стеке.

Впрочем, ограничение можно обойти изменить в большую сторону. Достаточно задать новый лимит через встроенную в модуль sys функцию.

sys.setrecursionlimit(new_limit)

Но помните. С большим стеком приходит большая ответственность. 🕸
👍6🔥3
Чем заняться в выходные? Может почитать одно старое, но от этого ничуть не утратившее актуальность интервью со мной. 🤓
Хотя. Оно скорее не обо мне, а о Python. Но и вы собрались в канале ради языка программирования. Так что смело click по ссылке. 💻
https://habr.com/ru/company/habr_career/blog/454182/

Комментарии можно и туда, и сюда 🔁
🔥3👍1