• Как происходит кеширование строк в Python?

    @throughtheether
    human after all
    С числами вроде разобрался - кешируется [-5, 256], но насчет строк нашел только скудные "кешируюутся короткие строки". Хотелось бы узнать более конкретно условия кеширования.
    В этом докладе (с 9 минуты) говорится, что, как правило, кэшируются строки длины в 1 байт и пустая строка. Думаю, это зависит от имплементации интерпретатора/VM.
    Также интересно, что такое "interned strings"?
    В моем представлении, это и есть кэшированная строка. Есть встроенная функция intern, возвращающая интернированный (кэшированный) вариант строки. Пример:
    >>> sys.version
    '2.7.6r3 Stackless 3.1b3 060516 (default, Apr 11 2014, 15:44:48) [MSC v.1500 32 bit (Intel)]'
    , короткие строки кэшируются автоматически:
    >>> s1==s2
    True
    >>> s1="toster"
    >>> s2="toster"
    >>> id(s1)==id(s2)
    True
    , длинные - нет:
    >>> s3="ticking away the moments that make up a dull day"
    >>> s4="ticking away the moments that make up a dull day"
    >>> s3==s4
    True
    >>> id(s3)==id(s4)
    False
    , но их можно кэшировать принудительно:
    >>> s5=intern("you fritter and waste the hours in an off-hand way")
    >>> s6=intern("you fritter and waste the hours in an off-hand way")
    >>> s5==s6
    True
    >>> id(s5)==id(s6)
    True
    >>>
    Ответ написан
    2 комментария
  • Как выполнить поиск по подгруппе?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Не всегда рабочий вариант:
    select * from pc group by inv_number having date=MAX(date)

    UPD:
    Всегда рабочий вариант:
    SELECT g.* from pc g 
    INNER JOIN (
    SELECT inv_number, MAX(date) as date FROM pc 
    GROUP BY inv_number) 
    AS s USING (inv_number, date)
    Ответ написан
    2 комментария
  • Как выполнить поиск по подгруппе?

    @asdz
    Желательно бы, сюда кидать примерчик

    Может так:?
    SELECT * FROM (
              SELECT * FROM pc ORDER BY date ASC
    ) tmp
    GROUP BY inv_number
    ORDER BY inv_number
    Ответ написан
    Комментировать
  • Локален ли GIL для каждого Python процесса?

    alexclear
    @alexclear
    A cat
    Конечно, GIL локален для каждого процесса.
    Как может быть иначе? Процессы по умолчанию ничем не связаны.
    Ответ написан
    Комментировать
  • Какой выбрать видеоконвертер?

    egor_nullptr
    @egor_nullptr
    ffmpeg/avconvert
    Ответ написан
    Комментировать
  • Выбор метода обучения программированию: колледж или самообразование?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пока программирование сводится к складыванию одной строчечки к другой, как в конструкторе Лего, оно и будет вызывать только энтузиазм и положительные эмоции. Таких энтузиастов похапе наплодил 100500 человек - очень уж просто складывать.
    Со временем же отсутствие математического аппарата начнет ощущаться, как груз, привязанный к ногам, не позволяя расти выше.

    Хотя, конечно, на похапе можно всю жизнь просидеть, клепая сайты на вордпрессе, безо всякой математики.
    А в вопросах криптографии ли, обработки изображений ли, топологии сети ли - бегать с вопросами на тостер и полагаться на мнение других людей. А в итоге перестать вообще понимать что делаешь - со всеми вытекающими последствиями.
    В общем, говнокодить на вордпрессе можно и без математики.
    Ответ написан
    5 комментариев
  • Является ли уход из университета правильным решением?

    makol
    @makol
    Кусать локти-но все успевать, в России жизнь непредсказуема фиг знает
    где тебе диплом пригодиться, но лучше чтоб он у тебя был.
    Восточная мудрость гласит; Если меч тебе понадобиться всего лишь один раз в жизни,
    то тебе потребуется его каждый день носить с собой.
    Так что думай, стоит подстелить соломки или нет, второй возможности может и не предоставиться. : )
    Ответ написан
    3 комментария
  • Что вы делаете, если на работе появилось свободное время?

    ScorpLeX
    @ScorpLeX
    Отвечаю на вопросы.
    Ответ написан
    Комментировать
  • Почему SELECT date( "2014-01-01" ) - date( "2013-12-31" ) выдает 8870?

    akashtrih
    @akashtrih
    А что ты хотел сделать вызовом функции DATE() для дат, у которых уже нет времени? Фактически, у тебя разность строк "2014-01-01" и "2013-12-31", которые преобразуются в числа 20140101 и 20131231, разность которых и равна 8870.
    Для получения кол-ва дней между двумя датами, можно воспользоваться функцией DATEDIFF():
    SELECT DATEDIFF('2014-01-01','2013-12-31');
    Ответ написан
    Комментировать