Если вы хотите понять, как работает Python, я настоятельно рекомендую прочитать документацию для встроенных модулей под заголовком "Language Services" , в частности, * 1004. * и dis
модулей. Python предоставляет в качестве импортируемых и Python -управляемых модулей все свои возможности синтаксического анализа. Вы можете видеть, использовать и изменять его синтаксический анализ кода, как он генерирует байт-код, и его выполнение ядра.
Я не уверен, действительно ли это помогает, но RETURN_VALUE
это свой собственный код операции в байт-коде Python, так что кроме создания своего собственного байт-кода вручную или использования результатов анализа, вероятно, нет другого способа получить поведение ключевого слова return
. Реальная реализация того, как это ведет себя, будет зависеть от реализации (например, CPython может сделать это не так, как в Pypy), так что вам нужно быть более конкретным c в своем вопросе, или просто покопайтесь в их исходном коде для этого кода операции.
Тем не менее, ничто не мешает вам создавать свой собственный стек в виде списка и вставлять / извлекать фреймы стека в него и из него, кроме явного безумия действия. Например,
stack = []
def my_pseudo_func():
global stack
args, kwargs = stack[-1]
x, = args
# do some stuff
my_return_result = x + 5
###
stack.pop()
stack.append(my_return_result)
stack.append(((3,), {}))
my_pseudo_func()
result = stack.pop()
assert result == 8