Мой запрос находится в нижеприведенной программе относительно символов, которые хранят значения и функции при запуске http://pythontutor.com/.
Мой вопрос:
Как выглядит модель выполнения python над программой выше в памяти перед началом интерпретации программы python? Как визуализировать этот макет памяти? например, c исполняемый файл имеет сегменты кода/стека/кучи/дополнительные/данные, как пример, я не сравниваю
Является ли 'const' именем области памяти 32/64 бит, сохраняющей значение 2 с типом, назначенным как целое?
add()/sub()/другие функции отображаются в столбце Objects в соответствии с диаграммой. Итак, как я воспринимаю функции, хранящиеся как объекты? Как это визуализировать?
В соответствии с диаграммой: Is op - указатель функции, указывающий на функцию sub()?
Каждая программа C (скомпилированный язык) имеет сегменты кода/данных/стек/дополнительные/кучи, загруженные в память перед выполнением. Создает ли интерпретатор python любой макет памяти для каждой программы python перед началом интерпретации программы python? Если да, как мне визуализировать этот макет памяти?
Он имеет вид макета, но здесь куча является самой важной частью, так как каждый объект помещается в кучу. Сегмент кода является просто интерпретатором, сегментом данных является также внутреннее состояние интерпретатора и стек.
Что касается программы Python, это только куча. Но сама компоновка похожа на любую другую программу.
Является ли
const
именем области памяти 32/64 бит, сохраняющей значение2
с типом, назначенным как целое?
Это имя в текущем рабочем пространстве (здесь: в пространстве имен модулей), который по существу является dict, который выполняет назначения между строками и произвольными объектами. В этом случае строка const
ссылается на целочисленный объект, который содержит значение 2
.
(Этот объект может быть создан заново или повторно использован в зависимости от обстоятельств, это не имеет никакого значения, поскольку оно является неизменным.)
add()
/sub()
/другие функции отображаются в столбце Objects в соответствии с диаграммой. Итак, как я воспринимаю функции, хранящиеся как объекты? Как это визуализировать?
Как написано в моих комментариях в ответ Игнасио:
В случае функций у вас есть объект, который имеет определенные поля, содержащие e. г. код в терминах байт-кода, количество параметров, которые у него есть, и т.д. И у него даже есть методы, например __get__()
, который вызывается внутри для привязки метода к объекту или __call__()
для вызова реальной функции, кроме __format__()
, __repr__()
и т.д.
Integer объект имеет, где-то глубоко внутри, место для хранения фактического значения. В случае long()
в Py2 или любом int()
в Py3 он сохраняет данные для хранения значения (например, 2
), а также длины, необходимой для него. Кроме того, он имеет ряд методов. Посмотрите на вывод dir(2)
, чтобы увидеть, что он имеет множество методов, например, для форматирования, для арифметики и т.д..
В соответствии с диаграммой Is
op
указатель функции, указывающий на функциюsub()
?
Вид, да.
Существует объект функции, который внутренне знает, что его исходное имя было sub
. Но это знание предназначено только для показа.
В вашем случае это относится к двум именам, op
и sub
. Таким образом, обращение к любому из них имеет тот же результат.
Обратите внимание, что "указатели функций" как таковые отсутствуют, есть только ссылки или имена, которые относятся к объекту любого типа. Тип объекта фиксирован, но не "тип ссылки" (поскольку такой вещи нет).
В Python не беспокойтесь о сегментах памяти и о том, что происходит за кулисами. Скорее, среды (области) важнее. Диаграмма блоков и указателей, которую вы включили, является разумным способом визуализации памяти. Белая часть показывает, как выглядит глобальная среда. Когда функция вызывается, создается новая (синяя) среда.
const
- переменная. Переменные в Python динамически типизируются слабо и могут хранить что угодно. Фактически, целые числа Python не переполняются и могут хранить числа, превышающие 2 64. В этом случае const
- это переменная (с запутанным именем), которая содержит номер 2
.
Функция представляет собой абстрактное понятие вызываемого blob кода. Вы можете назначить его переменной, как и любое другое значение.
Вы могли бы считать это указателем на функцию, если это заставляет вас чувствовать себя комфортно, но тогда вы будете выступать в качестве программиста на C. Программист Python просто сказал бы, что op
имеет функцию sub
как значение.
Словари по словарям. Словари - это самая важная структура номер 1 в Python.
Это ключ записи в текущем словаре. Значение - это объект 2
.
Это не те функции, которые являются объектами, но некоторые объекты являются функциями. Или номера. Или словари.
Это ключ записи в текущем словаре. Значение sub
.