@ru_python

Страница 910 из 9768
Zart
03.06.2016
20:02:51
один объект другому по дефолту не равен

Марк
03.06.2016
20:03:12
id у них одинаковы

Viktor
03.06.2016
20:03:14
Google
Viktor
03.06.2016
20:03:21
Zart
03.06.2016
20:03:29
не одинаковы

потому что он мгновенно освобождал объект

если он сделает a = object() b = object() то рефкаунты на созданные объекты не будут падать в ноль, объекты будут разными и их id() тоже

Марк
03.06.2016
20:05:04
In [48]: id(object())== id(object()) Out[48]: True In [49]: object()== object() Out[49]: False

Zart
03.06.2016
20:05:16
причем надо учитывать что дефолтный репл еще хранит последнее значение в _ обычно, и это порой заставляет объект еще жить до следующей команды

Марк
03.06.2016
20:05:25
Это как пояснить?

Viktor
03.06.2016
20:05:37
In [48]: id(object())== id(object()) Out[48]: True In [49]: object()== object() Out[49]: False
Он сохранит ID, потом освободит объект

И для второго

Марк
03.06.2016
20:06:22
In [50]: id(object()) is id(object()) Out[50]: False In [51]: object() is object() Out[51]: False

Хотя есть еще вот так

Google
Zart
03.06.2016
20:06:48
object создается, результат суется в id, после этого сразу же освобождается потом создается заново, суется во второй айди

Zart
03.06.2016
20:07:03
ты умудряешься пересоздать объект в одной области памяти на лету

Марк
03.06.2016
20:07:38
In [52]: id(object()) Out[52]: 3072869880L In [53]: id(object()) Out[53]: 3072869880L

Zart
03.06.2016
20:08:06
цпитон по дефолту грохает объекты сразу как рефкаунт падает в ноль а вот айронпитон - нет. там грохание идёт на этапе вызова гц

Zart
03.06.2016
20:08:54
поэтому код вида data = open('filename').read() в цпитоне закроет файл сразу а в айронпитоне ссылка доживет до выхода из программы и вызовет мат в виде варнинга про ресурсы

drjackild
03.06.2016
20:11:47
Кстати, к теме вопросов на собеседовании. Сегодня был в СофтСерв, задали такой вопрос: К примеру у нас есть класс, который может быть использован в качестве контекс-менеджера: class Manager: def __enter__(self): CODE BLOCK 1 return self def __exit__(self, exception_code, exception_value, traceback): CODE_BLOCK 2 return False есть такой пример кода: with Manager(): CODE_BLOCK 3 Предположим, в Питоне 3.6 отказались от контекст менеджеров. Как должен выглядеть код, который выполняет все эти куски кода в такой же последовательности и с такими же условиями, как и в контекст менеджере (предполагается, что у нас нет класа Манагер, а просто есть три куска кода.

Sergey
03.06.2016
20:14:32
1; try: 3 finally: 2 ?

/me не знает питон

drjackild
03.06.2016
20:15:01
не

в принципе мыслишь в том направлении, но не совсем

Andrei
03.06.2016
20:16:03
А я даж задачу не понял.

Слава Аллаху, я на крестах пишу D:

Zart
03.06.2016
20:16:31
там надо правильно аргументы в __exit__ передать

в finally и except случаях

не помню точно, но чтото типа m = Manager() try: m.__enter__() except: m.__exit__(*sys.exc_info()) finally: m.___exit__(None, None, None)

на самом деле сложнее, и с кэшированием ентер/эксит методов. в пепе расписан алгоритм детально

вся фигня с with заныкана в обработке исключений

Google
drjackild
03.06.2016
20:19:11
не не, класса нет, считай, что ты просто копи-пастишь три куска кода (block 1, block 2 block 3). как они должны быть записаны?

Zart
03.06.2016
20:19:19
а

drjackild
03.06.2016
20:19:26
короче ладно, я походу не совсем ясно выразился может быть

Sergey
03.06.2016
20:19:37
так аргументы в CODE_BLOCK 2 используются?

drjackild
03.06.2016
20:19:42
в общем, вот так они мне по итогу показали (я оказался неправ)

BLOCK 1 try: BLOCK 3 except: BLOCK 2

Zart
03.06.2016
20:20:18
чтото типа code block 1 try block 3 finally block 2

ага, так и думал

Andrei
03.06.2016
20:20:28
-___-

drjackild
03.06.2016
20:20:40
смысл в том, что в случае эксепшена, __exit__ не выполняется

Andrei
03.06.2016
20:20:42
Ебанутое задание. И спаведливо что не взяли

Viktor
03.06.2016
20:20:43
Zart
03.06.2016
20:20:45
да

drjackild
03.06.2016
20:20:51
ну, в оригинале сложнее немного

Sergey
03.06.2016
20:20:58
это как?

drjackild
03.06.2016
20:20:58
но смысл понятен, я думаю

@AndreiC кого не взяли и куда?

Viktor
03.06.2016
20:21:24
Там выполняется вообще-то exit если НЕТ exception'а

Zart
03.06.2016
20:21:30
смысл в том, что в случае эксепшена, __exit__ не выполняется
на самом деле выполняется, но получает на входе инфу об исключении

и волен выполнить или не выполнить свой блок

Google
drjackild
03.06.2016
20:21:46
ну да, это я и имел ввиду под "сложнее")

Andrei
03.06.2016
20:22:12
@AndreiC кого не взяли и куда?
А, ну я думал ты неправильно ответил.

Viktor
03.06.2016
20:22:15
Ну так они вообще не то дали

Ответ тупой какой-то

Они так with open сломают

drjackild
03.06.2016
20:22:36
Андрей, ну да, неправильно, но результата еще не было, если че))

Viktor
03.06.2016
20:22:41
Не будет файлы закрывать

это тест на знание https://www.python.org/dev/peps/pep-0343/
Вот тут раздел Specification: The 'with' Statement

drjackild
03.06.2016
20:23:07
Виктор, ну я так понимаю, это упрощенный вариант понимания вообще, как работают контекст-менеджеры

Viktor
03.06.2016
20:23:29
Так там именно finally, а не except!

drjackild
03.06.2016
20:23:41
не совсем, опять же

ща

Viktor
03.06.2016
20:23:56
Да я только из спецификации

Andrei
03.06.2016
20:24:03
Так там именно finally, а не except!
Ну сказали ж выше. Если эксепшн будет то еще придет инфа о том какой

Zart
03.06.2016
20:24:13
в спеке подробно расписано. и про файналли и про ексепт

Viktor
03.06.2016
20:24:46
Короче, finally ближе к правде чем except

Andrei
03.06.2016
20:24:48
Андрей, ну да, неправильно, но результата еще не было, если че))
Окей сорян. Просто у плюсовиков бы не взяли сразу :(

drjackild
03.06.2016
20:25:54
Ну, я явно не синиор, и даже не миддл, как по мне, так что меня не будут так строго судить. Но вообще, я думаю, что не прошел.

Sergey
03.06.2016
20:26:48
меньше надо думать

drjackild
03.06.2016
20:27:14
в чате программистов как-то странно звучит фраза)

Google
Viktor
03.06.2016
20:27:46
with EXPR as VAR: BLOCK -------/--------- mgr = (EXPR) exit = type(mgr).__exit__ # Not calling it yet value = type(mgr).__enter__(mgr) exc = True try: try: VAR = value # Only if "as VAR" is present BLOCK except: # The exceptional case is handled here exc = False if not exit(mgr, *sys.exc_info()): raise # The exception is swallowed if exit() returns true finally: # The normal and non-local-goto cases are handled here if exc: exit(mgr, None, None, None)

Вот оно

Sergey
03.06.2016
20:28:24
а программистам вообще думать надо запретить

Zart
03.06.2016
20:28:27
if not заметь

drjackild
03.06.2016
20:28:29
ну так часть про if not ext видишь

Zart
03.06.2016
20:28:34
и то что в оригинале там был return False

т.е. это значит что их Манагер() пропускает исключения дальше

drjackild
03.06.2016
20:29:00
короче, лажанул я с этим вопросом

Sergey
03.06.2016
20:29:18
а, значит надо except: pass добавить

drjackild
03.06.2016
20:29:18
ща еще вспомню. вообще, довольно интересно было, толковые мужики попались.

Zart
03.06.2016
20:29:21
поэтому в его случае это простой трай-файналли

drjackild
03.06.2016
20:29:32
а

Viktor
03.06.2016
20:29:42
короче, лажанул я с этим вопросом
Они сами с ним лажанули

drjackild
03.06.2016
20:29:48
"Чем отличаются транзакции в MongoDB от MySQL"

Sergey
03.06.2016
20:29:49
тьфу, наоборот

if not

Zart
03.06.2016
20:30:01
там if not: raise который ререйзит исключение дальше

Sergey
03.06.2016
20:30:04
значит я был прав

Viktor
03.06.2016
20:30:15
Zart
03.06.2016
20:30:27
drjackild
03.06.2016
20:30:32
Python backend dev

Страница 910 из 9768