@python_beginnersЭта группа больше не существует

Страница 121 из 1885
Zart
07.07.2016
12:13:38
нет, не интересно

для альтернативных реализаций это вообще неверно

а для цпитона это просто оптимизация скорости для общих случаев

Sergey
07.07.2016
12:14:11
это вопросы оптимизации, зачем это нужно обычному программеру?

Google
Марк
07.07.2016
12:14:17
Так вот, на этапе компиляции в обоих вариантах что происходит?

Zart
07.07.2016
12:14:23
намного важнее знать про оптимизацию работы со встроенными методами

ты вбиваешь в питоне строчку

он её читает, парсит, создает аст, обходит аст, генерит байткод, кормит байткод вм, которая в цикле обходит байткод и исполняет его

ты вбиваешь вторую строчку - происходит то же самое

когда же идёт обход АСТ и надо создать байткод - питон ищет эти самые 100 и 500

для 100 он находит существующие объекты и подставляет референс на них в сгенеренные co_const или как оно там

для 500 нет. поэтому когда a = 500 b = 500 мы получаем разные объекты

когда же ты пишешь a, b = 500, 500 в одной строке, то при компиляции, сперва для 500 создается новый объект, а для второго 500 находится он же уже тут, в локальном фрейме

поэтому айдишники совпадут

Andrew
07.07.2016
12:18:13
плюс в карму этому господину

Zart
07.07.2016
12:18:20
но всё это чисто детали реализации, потому что питон не обязан агрессивно искать существующие объекты

в случае со строками всё намного сложнее

Google
Марк
07.07.2016
12:18:41
плюс в карму этому господину
Этот господин давно душу продал. И не только свою.

Sergey
07.07.2016
12:18:56
кстати, для строк все немного иначе. вряд ли python преаллокейтит 'z'*10 In [52]: a='z'*10 In [53]: b='z'*10 In [54]: a is b Out[54]: True In [55]: b='z'*100 In [56]: a='z'*100 In [57]: a is b Out[57]: False

Zart
07.07.2016
12:18:58
потому что цпитон для работы с ними использует ряд обёрток, которые активно интернят строки

http://guilload.com/python-string-interning/

интернирование строк снижает расходы на память, ускоряет сравнения и прочие ништяки

но заниматься этим явно бессмысленно в 120% случаев

это кстати еще одна из причин по которой очень сложно считать сколько реально уходит памяти на структуры данных в питоне

потому что для иммутабельных объектов может применяться интернирование. а может и не применяться.

Марк
07.07.2016
12:24:40
А в других языках проще? Пехепе каком-нибудь/руби/перл?

Zart
07.07.2016
12:25:02
не вникал

Sergey
07.07.2016
12:25:09
А в других языках проще? Пехепе каком-нибудь/руби/перл?
это же не фишка языка, это фишка интерпретатора

Zart
07.07.2016
12:25:12
такие тонкости нужны очень редко

Sergey
07.07.2016
12:25:53
забавно, что интернируются только альфанумерики

интересно почитать комменты разработчиков, почему именно так

Zart
07.07.2016
12:26:14
спецификация языка тебе гарантирует только то, что всё в питоне - объект, работает по референсам и скорее всего использует рефкаунтинг

причем насколько помню gc модуль объявлен был деталью реализации, и рефкаунтинг в языке не обязателен

Марк
07.07.2016
12:27:24
Вообще, я рад, что сегодня поднялся вопрос с этими интами. До него мы как-то пиздели про id c инт - и я чет пришел к выводу по итогу, что если int, то id его изменить невозможно. Даже через дипкопи, ну или поебавшись, как Зарт предлагал. А теперь получается, что мое представление было вкорне неверным

Zart
07.07.2016
12:27:27
интересно почитать комменты разработчиков, почему именно так
потому что оптимизировали ж под кейворды в вызовах функций, т.е. по правилам наименования идентификаторов

Темный
07.07.2016
12:28:03
где почитать гайды что бы стать таким же умным как Зарт?

Марк
07.07.2016
12:28:26
Нигде)

Google
Zart
07.07.2016
12:28:42
читай доки и исходники, и всё будет

Марк
07.07.2016
12:32:56
В доках меня чутка бесит факт, что какой-то ньюанс может быть кратенько описан или вообще по сноске. Если привык читать быстро и по диагоналям, то проебать проще простого

Andrew
07.07.2016
12:33:03
Зарт а ты в плюсах силен?)

Zart
07.07.2016
12:33:18
не очень

слишком давно писал, но читать исходники все равно приходится регулярно

те же исходники wxWdigets, например, чтобы понять каким хреном глканвас инициализирует wgl

>>> import sys, pprint ; sys.displayhook = pprint.pprint >>> import dis >>> codeobj = compile('a, b = 500, 500', '<code>', 'exec') >>> {k: getattr(codeobj, k) for k in dir(codeobj) if k[:3] == 'co_'} {'co_argcount': 0, 'co_cellvars': (), 'co_code': 'd\x02\x00\\\x02\x00Z\x00\x00Z\x01\x00d\x01\x00S', 'co_consts': (500, None, (500, 500)), 'co_filename': '<code>', 'co_firstlineno': 1, 'co_flags': 64, 'co_freevars': (), 'co_lnotab': '', 'co_name': '<module>', 'co_names': ('a', 'b'), 'co_nlocals': 0, 'co_stacksize': 2, 'co_varnames': ()} >>> dis.dis(codeobj) 1 0 LOAD_CONST 2 ((500, 500)) 3 UNPACK_SEQUENCE 2 6 STORE_NAME 0 (a) 9 STORE_NAME 1 (b) 12 LOAD_CONST 1 (None) 15 RETURN_VALUE None

Марк
07.07.2016
12:45:30
А что значит ; ?

In [390]: import sys, os ; os <module 'os' from '/usr/lib/python2.7/os.pyc'>

И это не ошибка

Zart
07.07.2016
12:46:15
разделитель команд, как в том же С

просто в питоне редко им пользуются, так как читабельность хромает

Zart
07.07.2016
12:47:26
ну и плюс циклы и условия нельзя нормально писать через него, так как отступов нет

Sergey
07.07.2016
12:47:32
Да и в других языках не сильно однострочники любят, если только это не perl

Марк
07.07.2016
12:48:00
In [391]: print "ok" ; print "yes" ok yes

Зарт, ты иногда учишь плохим вещам

Блядь, это охуенно

Zart
07.07.2016
12:48:36
ну if/while/for ты туда не сунешь

Марк
07.07.2016
12:52:36
return 1; return 2; return 3

Прикольно.

Google
Sergey
07.07.2016
12:52:55
Прикольно.
Только зачем?

Zart
07.07.2016
12:52:57
первый ретурн отработает, до второго не дойдет

Марк
07.07.2016
12:53:04
Ага

Темный
07.07.2016
12:53:36
на правительство?

Марк
07.07.2016
12:53:58
Только зачем?
Понимаешь, это называется любопытством или жаждой познания. Мы, вообще-то в космос летаем благодаря этому

Zart
07.07.2016
12:54:12
ну газпром вроде государственная, но его дочки таки частные

JPyFoxy
07.07.2016
12:55:11
Решал задание типа нахождение уникальных элементов в массиве. from random import * m = [] mas = [randrange(0, 10) for i in range(10)] mas.sort() print("input :", mas) for i in mas: if(mas.count(i) == 1): m.append(i) print("output:", m)

Admin
ERROR: S client not available

Марк
07.07.2016
12:56:23
";" - это бед практис, не надо так писать
я вообще о такой лексеме не знал до сегодняшнего дня. И если бы еще час назад меня бы спросили, есть ли точка с запятой в Пайтоне, я бы сказал, мол, ты ч0 дебил?

JPyFoxy
07.07.2016
12:57:00
?это задание можно решить проще

mey
07.07.2016
12:59:06
Можно разу выводить

Зачем два массива

Zart
07.07.2016
12:59:18
>>> mas = [randrange(0, 10) for i in range(10)] >>> mas [0, 5, 0, 6, 2, 1, 7, 3, 1, 0] >>> [k for k, v in collections.Counter(mas).items() if v == 1] [2, 3, 5, 6, 7] >>>

Google
Zart
07.07.2016
12:59:41
либо загонять элементы в два сета

Andrey
07.07.2016
13:00:44
я вообще о такой лексеме не знал до сегодняшнего дня. И если бы еще час назад меня бы спросили, есть ли точка с запятой в Пайтоне, я бы сказал, мол, ты ч0 дебил?
говорить другим людям "ты чо дебил?", не очень хороший тон. Особенно если не читал доку и вообще не знаешь предмет разговора

Zart
07.07.2016
13:01:46
seen, seen_once = set(), set() для каждого нового x: if x in seen and x in seen_once: del seen_once[x] seen.add(x) в seen_once сете будет список элементов, которые встречались лишь раз на данный момент

Zart
07.07.2016
13:02:24
марк, перечитай https://docs.python.org/2/reference/

можно по диагонали за полчаса

mey
07.07.2016
13:03:00
Zart
07.07.2016
13:03:16
просто хотя бы для того чтобы знать список ключевых слов и общую работу каждого

Andrey
07.07.2016
13:03:29
Да
был и есть. Но это дело каждого как себя вести, в общем-то

Марк
07.07.2016
13:05:26
( ) [ ] { } @ , : . ` = ; += -= *= /= //= %= &= |= ^= >>= <<= **=

Zart
07.07.2016
13:06:50
` выпилен в тройке

`something` это очень старая запись, с первых питонов эквивалентна repr(something)

Марк
07.07.2016
13:08:05
Кстати, вот поэтому мне и не нравится дока по пайтону: список есть, а дальше пиздуй искать самостоятельно

Zart
07.07.2016
13:08:13
больше вроде бактик нигде в питоне не применяется

Roman
07.07.2016
13:08:31
если ты читаешь всегда быстро и подиагонали, то тебе не видать большой и чистой любви

лишь случайные связи

Zart
07.07.2016
13:08:37
нууу.. я изучил 2.5, а потом читал what's new in X.Y

Марк
07.07.2016
13:09:09
если ты читаешь всегда быстро и подиагонали, то тебе не видать большой и чистой любви
Ну я вот референс открыл. Список есть, пара абзацев - и гуляей лесом. Ссылок никаких на лексемы

Zart
07.07.2016
13:09:24
всё разжевано по порядку

Марк
07.07.2016
13:09:46
https://docs.python.org/2/reference/lexical_analysis.html#delimiters

Страница 121 из 1885

Эта группа больше не существует Эта группа больше не существует