Скомпилировать список с более чем одним аргументомPython

Программы на Python
Ответить
Anonymous
 Скомпилировать список с более чем одним аргументом

Сообщение Anonymous »

Почему следующая строка является допустимым кодом Python?

Код: Выделить всё

code = compile('l = list(1, 2, 3, 4, 5)', '', 'exec')
В документации сказано
  • Использование конструктора типа: list() или list(iterable)
Я могу даже написать следующее:

Код: Выделить всё

code2 = compile('l2 = list[1, 2, 3, 4, 5]', '', 'exec')
Однако байт-код отличается:

Код: Выделить всё

>>> code = compile('l = tuple (1,2,3,4,5)', '', 'exec')
>>> dis.dis(code)
1           0 LOAD_NAME                0 (tuple)
2 LOAD_CONST               0 (1)
4 LOAD_CONST               1 (2)
6 LOAD_CONST               2 (3)
8 LOAD_CONST               3 (4)
10 LOAD_CONST               4 (5)
12 CALL_FUNCTION            5
14 STORE_NAME               1 (l2)
16 LOAD_CONST               5 (None)
18 RETURN_VALUE
>>> code2 = compile('l2 = tuple [1,2,3,4,5]', '', 'exec')
>>> dis.dis(code2)
1           0 LOAD_NAME                0 (tuple)
2 LOAD_CONST               0 ((1, 2, 3, 4, 5))
4 BINARY_SUBSCR
6 STORE_NAME               1 (l2)
8 LOAD_CONST               1 (None)
10 RETURN_VALUE
В документации сказано:

Аргумент mode указывает, какой код должен быть скомпилирован; это может быть 'exec', если source состоит из последовательности операторов, 'eval', если он состоит из одного выражения, или 'single', если он состоит из одного интерактивного оператора (в последнем случае будут напечатаны операторы выражений, результатом которых является что-то отличное от None).

Что именно здесь происходит? Где в документации это описано?

Подробнее здесь: https://stackoverflow.com/questions/798 ... e-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»