Junior Python School
706 subscribers
92 photos
29 links
Surprising the python community with pure python 🔝

Moving channel from Russian to English.


Enthusiastic reviews can be written to @pythonjuniorschoolacc ❤️
Download Telegram
Пока наша команда обсуждает тонкости поста про хешируемые объекты, чтобы помочь всем в этом разобраться, а пока есть задачка, чтобы никто не скучал.

Один пхпшник написал свой первый код на самой последней версии python. Он использовал магический метод __cmp__, и ему надо это переписать(подумай, почему). Он расстроился и пришел к тебе. Подумай, что ему посоветовать.
Разберись в таком синтаксисе и выбери правильный ответ.
Хотя.. вы уже и сами привыкли к подвохам)
Anonymous Quiz
15%
False False
24%
False True
8%
True False
7%
True True
17%
Небольшая ошибка в синтаксисе.
29%
Серьезная ошибка
Выбрать оператор с наибольшим приоритетом...
Anonymous Quiz
8%
| (bitwise OR)
13%
is
36%
**
8%
in
21%
and
13%
>>
3 and 7 or 0 and 1
Anonymous Quiz
47%
True
18%
False
10%
3
12%
7
4%
0
4%
1
5%
21
Что выведет программа?

Внимательность творит чудеса..
Anonymous Quiz
11%
88
9%
90
38%
99
2%
100
9%
108
18%
117
13%
Другой ответ
Какой метод тут должен быть вместо METHOD?
Anonymous Quiz
27%
dict
23%
group
10%
groups
23%
groupdict
10%
span
7%
regs
sum(iterable, /, start=0) - воистину магическая встроенная функция питонистского языка.

Пример:
>>> sum([1, 2, 3])
6
>>> sum([1, 2, 3], 2)
8

Простая сумма. Ничего сложного?
Но сможешь ли ты пройти тест, или ошибешься?

Мы очень радуемся, когда много людей ошибаются при решении наших тестов. Значит тест был не зря и мы смогли чем-то вас удивить.

Не стесняйся задавать вопросы знакомым программистам, или даже просто спрашивать что-то в питонячьих чатах или на stackoverflow. Пока другие тратят дни, чтобы дойти до чего-то самим, ты можешь потратить всего пару часов и выучить сильно больше. Ибо мир меняется слишком быстро..
Планируем запуск обещанного бесплатного мастер класса по библиотеке itertools. Материалы уже готовы. Должно быть очень интересно.

Мастер класс хотим провести в отдельно созданном для этого канале в ближайшее время. Анонс пришлём позже. Ты с нами?
Anonymous Poll
78%
Да, я определенно с вами
22%
Я очень постараюсь поучаствовать
Вот это функция. Всем функциям - функция. Хоть в каждый проект ее сувать..

Что же тут будет напечатано?
Что будет напечатано?
Anonymous Quiz
15%
Ничего
4%
30
2%
60
6%
90
5%
300
29%
900
39%
Ошибка
n = (0b011 + 0o007 + 0x00A)//0XA

Чему равно n?
Anonymous Quiz
16%
1
26%
2
26%
2.0
14%
10
9%
20
9%
20.0
Подсказка к предыдущей задачке. 🦉
И да, регистр не имеет значения, как и количество нулей между обозначением системы счисления и числом)
Каррирование (currying) в python.

Каррирование - это популярная техника функционального программирования, а python поддерживает эту парадигму, поэтому стоит про это немного знать.

На самом деле, каррирование — это преобразование функции с множеством аргументов в набор вложенных функций с одним аргументом.
То есть f(a, b, c) = f(a)(b)(c)

Сложна? Давай разберем пример.
Допустим у нас есть функция, позволяющая отправить email от кого-то кому-то. В упрощенном виде такая:
def send_email(from_, to):
print(f'Email is sent from {from_} to {to}')
Оказалось, что в вашей системе не так много лиц от которых шлется email. И от них шлется множество писем в разных ситуациях. Предположим, что их двое: СЕО и CTO компании.
Тогда имеет смысл, возможно, сделать такие манипуляции:
def send_email_from(from_):
return lambda to: send_email(from_, to)
То есть send_email_from возвращает функцию, которой нужно передать только один параметр to, чтобы отправить email.

Как этим пользоваться.
Во-первых, теперь можно посылать письма так:
send_email_from(CEO_EMAIL)('someone')
Что эквивалентно
send_email(CEO_EMAIL, 'someone')
Во-вторых, теперь можно делать такое
email_ceo = send_email_from(CEO_EMAIL)
Это означает, что теперь, для того, чтобы отправить письмо от CEO, достаточно написать
email_ceo('someone')
что эквивалентно
send_email(CEO_EMAIL, 'someone')
Это разбиение аргументов по функциям, которые вызывают другие функции - и называется каррированием. Представь, что аргументов было очень много и многие из них редко менялись. Удобно?


Кстати, эта задача была про каррирование... Пересмотри ее еще раз!
print('start')
Cls()()

Что будет выведено после start?
1)
Metaclass __call__ was called
__new___ was called
__init__ was called
__call__ was called
2)
Metaclass __new__ was called
Metaclass __init__ was called
Metaclass __call__ was called
__new___ was called
__init__ was called
__call__ was called
3)
__new___ was called
__init__ was called
__call__ was called
4)
Metaclass __new__ was called
Metaclass __init__ was called
__new___ was called
__init__ was called
__call__ was called