@ru_python

Страница 3090 из 9768
Ignalion
03.07.2017
19:30:30
То вывело бы от 0 до 9

Nikolay
03.07.2017
19:30:37
наоборот

в питоне всегда передача по ссылке же

Ignalion
03.07.2017
19:30:47
А выведет десять девяток

Google
Nikolay
03.07.2017
19:30:55
я эту задачу на собеседованиях задаю часто, да :)

Ignalion
03.07.2017
19:30:57
А в джавочке например такой финт ушами не пройдет

Igor
03.07.2017
19:31:01
Так это late-binding называется

Alexander
03.07.2017
19:31:04
в питоне всегда передача по ссылке же
в питоне передача по значению всегда. Просто передаются ссылки

Nikolay
03.07.2017
19:31:07
и еще прошу вставить в код три символа, чтобы его исправить

Igor
03.07.2017
19:31:19
Python’s closures are late binding. This means that the values of variables used in closures are looked up at the time the inner function is called.

От этого они не перестают быть кложурами

Nikolay
03.07.2017
19:31:39
Ignalion
03.07.2017
19:31:39
Связывание — это ок. Я о том, что эта переменная в условии фора. И более того. Она доступна за его пределами

Так что. Не создает

А. Надо присвоить, придется три

Nikolay
03.07.2017
19:32:21
Один?
не, один не прокатит

Google
Alexander
03.07.2017
19:32:23
те же яйца, только в профиль
Нет, не те же. def foo(x): x.append(42) print "foo1", x def bar(x): x = x + [100500] print "foo2", x y = ["hello", "world"] foo(y) print "main", y bar(y) print "main", y

Нет, не те же. def foo(x): x.append(42) print "foo1", x def bar(x): x = x + [100500] print "foo2", x y = ["hello", "world"] foo(y) print "main", y bar(y) print "main", y
если бы была передача по ссылке, то не было бы разницы особой между foo() и bar()

b0g3r
03.07.2017
19:33:49
Второе это extend

Ignalion
03.07.2017
19:34:03
Тут ещё можно начать разглагольствовать о том что x = 2 def f(): print(x) def g(): print(x) x = 5 Функция g() упадет на принте

Nikolay
03.07.2017
19:34:42
если бы была передача по ссылке, то не было бы разницы особой между foo() и bar()
так наоборот же, как раз по ссылке все так бы и было, ибо во втором случае ты присваиваешь

конструктор копирования же, если говорить в терминах С++

Ignalion
03.07.2017
19:35:28
Но в общем, как любой нормальный старый язык, питон — ужасное говно и набор костылей. Сомнительных. И если копать глубже, становится стремительно хуже. Например, вызов деструктора объектов не гарантируется. Течёт (!) рекурсия (!!) нестед функций. Это вообще адище

Igor
03.07.2017
19:36:20
https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/

ilya
03.07.2017
19:36:29
? так, потные руки от питона убрал ??

Ignalion
03.07.2017
19:36:31
Nikolay
03.07.2017
19:37:01
а про рекурсию в питоне мы уже как-то обсуждали, что она в текущем виде бесполезна)

Nikolay
03.07.2017
19:38:20
object.__del__(self) Called when the instance is about to be destroyed. This is also called a destructor.
"This is also called a destructor." - это не совсем верно

это просто коллбэк

Ignalion
03.07.2017
19:38:36
а про рекурсию в питоне мы уже как-то обсуждали, что она в текущем виде бесполезна)
Да это ладно. Она течёт. Я не уверен, что это пофиксили. Ликает, понимаешь, рекурсивный вызов любой вложенной функции

Tony
03.07.2017
19:38:36


Nikolay
03.07.2017
19:38:43
с деструкторами в том же C++ он связан чуть более, чем никак

Google
wf
03.07.2017
19:39:52
течет?

Ignalion
03.07.2017
19:40:32
не знаю, первый раз от тебя это услышал
I learned it hard way:) Мы сначала нашли мемори лик, потом долго курили где, а потом нашли баг в 2.7 питоне. Что-то такое def f1(): def f2(): while <condition>: f2() Течёт до перезапуска интерпретатора

Alexander
03.07.2017
19:41:03
конечно же связан, хотя довольно разные вещи

Ignalion
03.07.2017
19:41:28
В общем, поливать говном питон кто-кто, а питонщики могут долго и со вкусом)

Nikolay
03.07.2017
19:41:30
ну прям уж так и не связан
чуть более, чем никак :) я не говорил, что совсем "никак"

Alexander
03.07.2017
19:41:49
ок, fair enough :)

Nikolay
03.07.2017
19:41:53
но в C++ GC нет в принципе, так что не совсем корректное сравнение

Ignalion
03.07.2017
19:42:12
В общем, поливать говном питон кто-кто, а питонщики могут долго и со вкусом)
Что, впрочем, не мешает писать на нем мегабайты кода)

Ignalion
03.07.2017
19:44:35
так а что именно течет-то?
Нагуглить надо, а мне чето лень с телефона

Nikolay
03.07.2017
19:44:46
ибо все современные компиляторы либо его игнорируют совсем, либо гораздо лучше оптимизируют без него

Ignalion
03.07.2017
19:46:58
А ещё дефолтный питон под Винду собран без использования winsock2 еррор-кодов. Это уже больше косяк разработчиков либ, конечно, но если вдруг у тебя ембеддед питон и ты захочешь включить как надо, то с вероятностью 99% при попытке переслать в сокет что-то большое упадешь на WSAEWOULDBLOCK

Я могу долго)

wf
03.07.2017
19:48:19
хз, если правильно считать количество ссылок на объект то __del__ никогда не подводит

Python'ер
03.07.2017
19:48:24
Вообще по идее можно любой язык долго и со вкусом обмазывать экскрементами.

Лишь брейнфак идеален. :)

Ignalion
03.07.2017
19:49:56
хз, если правильно считать количество ссылок на объект то __del__ никогда не подводит
Считай не считай, у него в документации английским по белому написано что тебе никто не гарантирует что оно выполнится

Google
Ignalion
03.07.2017
19:50:13
Лишь брейнфак идеален. :)
Не. Скалочка без ООП и растик пока ниче так

ultranoise ?
03.07.2017
19:51:29
А как растик устроен? На каких принципах?

Ignalion
03.07.2017
19:52:23
А и ещё. Кстати Это уже детали реализации питона, но ты не можешь заоверрайдить len() потому что integer is required

И __contains__

Aragaer
03.07.2017
19:53:07
ну на самом деле слово register означает, что попытка взять адрес этой хрени сразу выдаст ошибку компиляции

Aragaer
03.07.2017
19:54:08
а вот дальше уже компилятор может как угодно это игнорить - но раз адрес нигде не берется, то может и действительно в регистр засунуть

Admin
ERROR: S client not available

Igor
03.07.2017
19:54:51
There is a reason actually. The mere fact that you cannot take a address of the variable yields some optimization opportunities: the compiler can prove that the variable will not be aliased

Ignalion
03.07.2017
19:55:12
Igor
03.07.2017
19:55:14
Aragaer, спасибо, не знал про это

Ignalion
03.07.2017
19:56:28
Там БОЛЬШОЙ варнинг

Warning Due to the precarious circumstances under which __del__() methods are invoked, exceptions that occur during their execution are ignored, and a warning is printed to sys.stderr instead. Also, when __del__() is invoked in response to a module being deleted (e.g., when execution of the program is done), other globals referenced by the __del__() method may already have been deleted or in the process of being torn down (e.g. the import machinery shutting down). For this reason, __del__() methods should do the absolute minimum needed to maintain external invariants. Starting with version 1.5, Python guarantees that globals whose name begins with a single underscore are deleted from their module before other globals are deleted; if no other references to such globals exist, this may help in assuring that imported modules are still available at the time when the __del__() method is called.

It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits. И вот в самом описании

wf
03.07.2017
19:58:34
так тут смысл то в другом

Ignalion
03.07.2017
19:59:56
Смысл примерно такой. Рассказываю жизненную охуительную историю. Если вдруг тебе придет в голову не очень здравая идея сделать объект tmp файла и создать его в init и удалить в del - то неожиданно может оказаться, что по выходу из интерпретатора del не успеет выполнится. И твой файл не удалится

я устал экранировать)

Хотя вообще так, конечно, писать не надо:)

Pavel
03.07.2017
20:01:51
казалось бы, зачем придумали __enter__ и __exit__?

Google
wf
03.07.2017
20:01:51
это понятно, но ведь "дел" не для таких вещей!

Ignalion
03.07.2017
20:02:24
Ну вот я об этом и говорю, что он _может_ не выполнится

Ну да ладно. Хватит, пойду поиграю в видеоигры и завтра пойду опять писать на питоне:)

Roman
03.07.2017
20:05:39
Что-то asyncio как рак: где-то появился и дальше расползается по коду

ultranoise ?
03.07.2017
20:07:11
ЖО

Roman
03.07.2017
20:08:34
Nikolay
03.07.2017
20:08:41
Где?
в Go

Roman
03.07.2017
20:09:03
Запусти в короутине while 1: random.random()

Roman
03.07.2017
20:10:19
В гошечке оно не завесит вообще все

Nikolay
03.07.2017
20:10:44
ну так в гошечке потоки же, где надо

Roman
03.07.2017
20:10:54
А в asyncio - это верная смерть

Nikolay
03.07.2017
20:11:19
Запусти в короутине while 1: random.random()
вот был бы await random.random() и не было бы такой проблемы

Roman
03.07.2017
20:11:53

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