На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
    > Python 2.5 - Для чего он нужен?
      Цитата GoldFinch @
      это просто упаковка в кортеж (tuple) и распаковка из кортежа
      Откуда такие сведенья?
        Цитата NetVir @
        Откуда такие сведенья?
        На примере этого кода здесь видно, что запись "2, 3" действительно интерпретируется как typle
        ExpandedWrap disabled
          >>> a = 3, 4
          >>> a
          (3, 4)
          >>> type(a)
          <type 'tuple'>
          >>>

        Но посмотрим что происходит на самом деле:
        ExpandedWrap disabled
          >>> from dis import *
          >>> dis
          <function dis at 0xb778fe2c>
          >>> dis('a=4')
                    0 STORE_GLOBAL    13373 (13373)
          >>> dis('a,b=3,4')
                    0 STORE_GLOBAL    25132 (25132)
                    3 DELETE_SUBSCR  
                    4 DELETE_SLICE+1
                    5 <44>          
                    6 DELETE_SLICE+2
          >>> dis('a,b,c=3,4,5')
                    0 STORE_GLOBAL    25132 (25132)
                    3 <44>          
                    4 DUP_TOPX        13117
                    7 <44>          
                    8 DELETE_SLICE+2
                    9 <44>          
                   10 DELETE_SLICE+3
          >>>

        Много не расскажу про этот байткод, но видно, что здесь упаковка и распаковка кортежа оптимизирована
        К примеру еще один код:
        ExpandedWrap disabled
          >>> dis("""d,e,f='a','b','c'
          ... (a,b,c)=(d,e,f)
          ... """)
                    0 LOAD_CONST      25900 (25900)
                    3 <44>          
                    4 BUILD_TUPLE     10045
                    7 STORE_GLOBAL    11303 (11303)
                   10 <39>          
                   11 DELETE_GLOBAL   11303 (11303)
                   14 <39>          
                   15 DUP_TOPX         2599
                   18 STORE_SLICE+0  
                   19 STORE_GLOBAL    25132 (25132)
                   22 <44>          
                   23 DUP_TOPX        15657
                   26 STORE_SLICE+0  
                   27 LOAD_CONST      25900 (25900)
                   30 <44>          
                   31 BUILD_TUPLE      2601
          >>>

        Цитата korvin @
        ууу, так это ещё хуже. ведь упаковка/распаковка в рантайме происходит?
        Действительно нееффективно, но я не вижу здесь никаких проблем. Если важна скорость вычисления, то конструкции (a,b)=(c,d) использоваться просто не будут при написании програмы, а (a,b)=(1,2) - оптимизированы - делаются без кортежей
          Я так понимаю, что не совершенно тупой компилятор должен сообразить, что групповое присваивание вполне можно делать без формирования кортежа с последующим его уничтожением, а просто разложив его на отдельные присваивания. Причем это даже еще не оптимизация.
          Да и не так уж много занимает это формирование/уничтожение кортежа.
          Другое дело возврат значений из функции
            сразу видно, тут собрались больше спецы по питону.
            тутор сначала хотя бы прочитайте, а потом пишите =\

            Добавлено
            тутор по 2.х лежит тут, если кто не знает
            http://docs.python.org/tutorial/index.html
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0259 ]   [ 15 queries used ]   [ Generated: 27.04.24, 20:46 GMT ]