Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.130.130] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Откуда такие сведенья?
|
Сообщ.
#17
,
|
|
|
Цитата NetVir @ На примере этого кода здесь видно, что запись "2, 3" действительно интерпретируется как typleОткуда такие сведенья? >>> a = 3, 4 >>> a (3, 4) >>> type(a) <type 'tuple'> >>> Но посмотрим что происходит на самом деле: >>> 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 >>> Много не расскажу про этот байткод, но видно, что здесь упаковка и распаковка кортежа оптимизирована К примеру еще один код: >>> 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 >>> Действительно нееффективно, но я не вижу здесь никаких проблем. Если важна скорость вычисления, то конструкции (a,b)=(c,d) использоваться просто не будут при написании програмы, а (a,b)=(1,2) - оптимизированы - делаются без кортежей |
Сообщ.
#18
,
|
|
|
Я так понимаю, что не совершенно тупой компилятор должен сообразить, что групповое присваивание вполне можно делать без формирования кортежа с последующим его уничтожением, а просто разложив его на отдельные присваивания. Причем это даже еще не оптимизация.
Да и не так уж много занимает это формирование/уничтожение кортежа. Другое дело возврат значений из функции |
Сообщ.
#19
,
|
|
|
сразу видно, тут собрались больше спецы по питону.
тутор сначала хотя бы прочитайте, а потом пишите =\ Добавлено тутор по 2.х лежит тут, если кто не знает http://docs.python.org/tutorial/index.html |