Нет, __code__
и func_code
являются ссылками на скомпилированный байт-код - вы можете разобрать их (см. dis.dis
), но не можете вернуться к исходному коду Python.
Увы, исходный код просто пропал, нигде не запоминается ...:
>>> import inspect
>>> def f():
... print 'ciao'
...
>>> inspect.getsource(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 694, in getsource
lines, lnum = getsourcelines(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 683, in getsourcelines
lines, lnum = findsource(object)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/inspect.py", line 531, in findsource
raise IOError('could not get source code')
IOError: could not get source code
>>>
Если inspect
не может добраться до него, это довольно показательный знак.
Если вы работали на платформе, использующей GNU readline
(в основном, любую кроме Windows), вы могли бы использовать тот факт, что readline
сам действительно запоминает некоторую "историю" и может записать его в файл ...:
>>> readline.write_history_file('/tmp/hist.txt')
и затем прочитайте этот файл истории - однако я не знаю, как это сделать в Windows.
Возможно, вы захотите использовать некоторые IDE с лучшими возможностями памяти, а не «сырой» интерпретатор команд, особенно на такой платформе, как Windows.