Я открываю реализацию CPython, структуру объектов Python и байт-коды Python.Python: информация о реализации функции Python
Играя с функциями, я обнаружил, что пустые функции имеют размер стека 1.
Почему? Что объявлено, что занять пространство стека?
Empty функция:
def empty():
pass
Функция информация о:
>>> dis.show_code(empty)
Name: empty
Filename: <pyshell#27>
Argument count: 0
Kw-only arguments: 0
Stack size: 1
Number of locals: 0
Variable names:
Constants:
0: None
Names:
Flags: OPTIMIZED, NEWLOCALS, NOFREE
First line number: 1
Free variables:
Cell variables:
Функция с местными жителями:
def withlocals():
first = 0
second = [1, 2, 3]
Функция: информация о
>>> dis.show_code(withlocals)
Name: withlocals
Filename: <pyshell#27>
Argument count: 0
Kw-only arguments: 0
Stack size: 3
Number of locals: 2
Variable names:
0: first
1: second
Constants:
0: None
1: 0
2: 1
3: 2
4: 3
Names:
Flags: OPTIMIZED, NEWLOCALS, NOFREE
First line number: 1
Free variables:
Cell variables:
Сама функция, предположительно - это еще один объект в Python. – jonrsharpe
Да, и что означает базовое стекирование? – JumpAlways
Догадка: если функции могут иметь нулевой размер стека, если у них нет локальных переменных, тогда функция, вызывающая другую функцию, может привести к тому, что оба имеют один и тот же адрес. –