Скомпилировать список с более чем одним аргументом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

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