01. Устройство CPython - Егор Овчаренко
Vložit
- čas přidán 5. 08. 2024
- В лекции мы поговорим о том, почему и что мы пишем на Python. Обсудим устройство интерпретатора и словарей, менеджмент памяти и типизацию. Вы узнаете, как работают генераторы и как устроены исключения.
Презентация: yadi.sk/i/dcNx5Sgix4axOA
Полезные ссылки:
Интепретатор в целом:
docs.python.org/3/reference/e...
github.com/python/cpython
leanpub.com/insidethepythonvi...
Управление памятью:
www.arctrix.com/nas/python/gc/
rushter.com/blog/python-memor...
instagram-engineering.com/dis...
stackify.com/python-garbage-c...
Исключения:
bugs.python.org/issue17611
Весь плейлист: • Школа бэкенд-разработк... - Věda a technologie
Очень полезная информация. Спасибо.
Вопросы аудитории очень хорошие, разбавляют лекцию хорошо
Спасибо! Полезная лекция. Хороший вход в Python для знакомых с Си.
Хороший материал. Я не новичок в питоне или Си но материал дал начало для глубокого узучения Cpython.
Лекция первоклассная, большое спасибо!)
Лекция отличная. По звуку небольшое замечание, очень неестественно звучит, когда фоновые шумы в промежутках между фразами вырезаны.
да там свист на фоне. Они видать его выпилить гейтом пытались. Но лучше бы уж частоту замьютили свиста. Реально сложно слушать когда вот так дергает
Да, звук адский
по поводу вопроса к try - в любом случае функция выходит только в finally, return в try и except игнорируются, но код в try и except выполняется:
def test():
try:
print('try')
return (1/0)
except:
print('except')
return ('except')
else:
return ('else')
finally:
print ('finally')
return ('finally')
s = test()
print('function:', s)
i = "1"
def test(i):
try:
i = i + 1
except:
return i
finally:
print("finally")
print(test(i))
finally
1
Сначала файнали, а уж потом ретерн через исключение. Вот так выходит.
На курсах по Питону мне не рассказали про copy, deepcopy и я долго мучался на задачах со вложенными списками...
Лекция отличная. Но звук все портит. Постоянные тихие паузы добивают.
👍👍👍
Очень жаль, что хеширование не было затронуто в полной мере, а было сказано только про то, что оно быстрее, нежели сравнение объектов. Здесь есть разные интересные штуки по типу почему hash(-1) == hash(-2) и другие. В любом случае, очень круто!)
Наоборот, сравнение объектов то есть сравнение их адресов быстрее - это сравнение указателей тогда как хеширование это не тривиальная, но быстрая функция поэтому сначала сравнение объектов потом их хеш значений.
@@robertalaverdyan3150 Я что-то не так понял? Сравнение объектов это как раз value equality, а не reference equality. a == b идентично a is b (т.е. object.__eq__) только в случае, если type(a).__eq__(a, b) возвращает NotImplemented
блок try - finally проще рассматривать как объект. Тогда finally - это деструктор этого объекта и он выполнится при любом return внутри этого блока try.
Жаль, что нет субтитров с вопросами.
Да есть такой недостаток, вопросов не слышно.
Лекция хорошая, познавательная, но со звуком беда.
Так и не услышал причин почему в питоне может течь память...
@@iloveudead Вы ж видите, что там фигня в популярном ответе написана, т.к. это не memory leak в классическом определении, а ситуации притянутые за уши...
@@Dustwalker а какое классическое определение?
У меня в либе как-то была утечка памяти, когда я в регистраторе функций через декораторы хранил сами объекты функций, а не слабые ссылки на них.
Основная фишка не столько в классической утечке памяти (когда память числится как занятая, хотя она не ниспользуется), сколько в том, что питон выделяет память сам, размечая ее на свои арены итд. (не знаю, насколько об этом сказано в лекции).
Так вот. однажды размеченная питоном память в операционную систему не возвращается. То есть если вы загрузили гигабайт данных, а потом они вам стали не нужны, то в рамках вашего процесса на питоне эта память освободится, но для операционной системы будет выглядить так как будто вы по прежнему этот гигабайт используете, так как питон его уже разметил и не отдает.
Поэтому когда сервис на питоне долго работает, он может со временем раздуваться по памяти из-за этого эффекта.
Но вроде бы, это поведение пофиксили в новых версиях интерпретатора, но подробностей я не знаю))
спасибо, не все понятно в силу собственной необразованности, но очень интересно
Здравствуйте,
А сейчас как?
Шикарно. 🐍👍🏻
50:10 я проверил в 3.11 - так не работает, оба выдают True
Хеши надо в таблице хранить, тогда это будет быстрая операция. А при каждом сравнении генерить хеши заново это будут тормоза, особенно если хеш функция переопределена.
Почему это компиляция в байт код считается интерпретаций? К примеру в том же Java javac считается компилятором, хотя тоже преобразует в байт код.
ru.wikipedia.org/wiki/Javac
Валера 🔫
Очень интересные вопросы задают слушатели такое ощущение что там учились не начинающие или мидлы а уже сениоры которые очень не плохо разбираються в low level.
Посмотрел немного, ощущение что просто достаточно немного си знать, мьютекс, чуть-чуть многопоточность, базовые структуры данных
❤️
Это точно первый урок для новичков?
33:50 Не понимаю, как добавление нового массива indices помогает нам сделать упорядоенный массив. На слайде все выглядит логичным, но при коллизии нам придется выкручиваться, что бы сохранить порядок как я понимаю? Как то тема раскрыта не до конца. И Профит от новой структуры мне не понятен, превратить пцстые слоты в None и тем самым уменьшить их значение?
P.s. Лекция огонь!
None меньше чем ["--", "--", ...]. На счет коллизий не скажу, но всё же без них дикт упорядочен
Singleton'ы всё таки не от минус пяти до двухста пятидесяти пяти, а от минус пяти до двухста пятидесяти шести включительно
К сожалению вопросы от слушателей не записались (
1:11:50 просто finally выполняется всегда первым, если он есть, потом уже выполнится элс
Пример
def func():
try:
pass
except:
pass
else:
return
finally:
print ('finally')
print (func())
>>>
'finally'
None
Нет. В данном случае finally был первым только лишь потому, что в else у нас return, на котором управление передается наружу, а finally вызвать нужно в любом случае - вызываем сначала finally, а потом return.
Если в else присутствует код, отличный от возврата, первым выполнится именно он. В момент return исполнится finally
@@someone_music
def ddd():
try:
10 / 1
except:
pass
else:
print('else')
return 'else'
finally:
return 'финали'
print(ddd())
вывод:
else
финали
Лектор: - Задавайте вопросы
Люди: - Задают вопросы
Лектор: - Не знаю, надо смотреть
Нельзя знать ответы на все вопросы и из этого не значит, что вовсе не нужно задавать вопросы
увольте своего звукача. он очень любит компрессор. нельзя же так давить звук 🤦🏻♂️
Тема очень интересная, но лектор не умеет объяснять
Когда рассказывают про дикты вместо ифоф, а в иходниках яндекса используются эти самые ифы вместо диктов. То когда лекторы рассказывают прл высокий уровень вхождения в яндекс, а на деле в слитых исходниках кучи говнокода.
сложно объясняет конечно...
он вообще не объясняет 😆
Заук отвратительный. Первые 2 минуты и уже не хочу смотреть. Неужели нельзя было сделать звук идеальным? Организаторы? В каком веке живем?
++
что там пищит на фоне??? звуком занимаеться кто то в этой компании
Приятно видеть, чем теперь занимается Клара Захаровна из "33 квадратных метра"
А что солист группы moby в РФ переехал?
И давно он сменил профориентацию?
Это Клара Захаровна
Честно говоря, мало что понятно из лекции
Лекция для сеньерных сеньеров похоже
Да не, просто нужно базовые структуры данных знать и си немного
@@viktor_borodinz я только что прошла базовый курс и всё равно ничего не понятно
@@user-wn2tf9lt7c вы можете попробовать спросить. Я могу попробовать объяснить
На вопрос про immutablte докладчик нёс пургу, но просил поправить.
czcams.com/video/PxIqLgjtQ5Y/video.html
class ImmutableDict(dict):
def __setitem__(self, key, value):
raise TypeError('Обломись')
D = ImmutableDict({'foo': 1, 'bar': 2})
print(D) # {'foo': 1, 'bar': 2}
D['baz'] = 3 # TypeError
# на самом деле надо сделать поболее, например переопределить update
D.update({'baz': 3})
print(D) # {'foo': 1, 'bar': 2, 'baz': 3}
всё это далеко до академического стиля, но люди все умные собрались, не академики конечно, но сове "низовое" знают и им приятно пообщаться, тем более формат и время не располагают к точному стилю с определением всяких дефиниций и тезисов
у яндекса большие проблемы. Лекторы очень плохо преподносят материал, да и сами живут на ниточке, еще чуток и умрет. Берите пример с Хирьянова, эмоции, радость в каждом слове.
Отвратительный доклад. Темы вообще не раскрыты.
Лекция ужасна с первых минут. Плохо подготовился лектор
Господи, ну и каша, "питон кладёт функцию на стек", как это можно понять то вообще если нет опыта в си и ассемблере...
Понимать и уметь рассказать - разные навыки.
Ну стек же не только в си)
Драндулет для квантовых вычислений недооценён инженерами на процентов 90-95. От его возможностей. Вообще этот механизм лучше назвать кубитрон. А инженеров которые пытаются его программироваться - кубитистами. В будущем, когда сменится несколько поколений кубитистов, лет через 50-80, программирование такого устройства будет называться балансировкой кубитирования под конкретные задачи, так как корневые устройства под компилирование, но наверное разной мощности, будут стандартными. Понадобиться развить новую промышленную отрасль, в области света.
Сейчас идёт переходный период когда «железо» не соответствует возможностям квантовых импульсов, на том и топчутся. С нынешним «железом» невозможно проводить точные квантовые измерения. Соответственно возможности недооценены. В Китае попробовали установить повторители, молодцы конечно, но и они дают минимальный эффект. Нет, конечно пусть пробуют, но таким путём всё будет происходить очень медленно. Может лет через 25 что то и появится.
Беда Силиконовой Долины что они работают бинарной технологией программирования. А для объёмной стандартизации требуется другое оборудование. А это усилие под силу только Россиянам. Кроме того есть возможность создавать «драндулеты» для вычислений на сверхлёгких частицах. Возможности выше квантовых на порядок.
www.Maharishi-TM.ru
Лектор слабый, уверен, что сильный разработчик, но выступает плохо.
В 23 году вся страна будет изучать С++. Потому что он будет очень лаконичным и крутым.
Вся страна изучала Пайтон, а все самые крутые и сверхбыстрые программы все равно пишут на С++. Ха-ха. Продолжайте.