У меня проблема с повторным запуском скрипта в spyder, который динамически табулирует некоторые свои собственные атрибуты.
Вот минимальный пример, представляющий то, что я делаю.У меня есть исходный скрипт, который я запускаю с помощью обычной команды Run (F5).Он работает в том же каталоге, в котором он находится:
runfile('C:/some/path/test.py', wdir='C:/some/path')
test.py
import sys
def x():
pass
def y():
pass
x.add = y.add = True
if __name__ == '__main__':
a = [obj for obj in tuple(sys.modules[__name__].__dict__.values())
if getattr(obj, 'add', False)]
print(a)
Я могу перезапустить этот скрипт пару раз,и всегда получаю один и тот же ожидаемый результат:
[<function x at 0x0000025E793DBD90>, <function y at 0x0000025E793DB598>]
Я ожидаю, что если я изменю имя одной из функций, скажем, с x
на f
, а присвоение атрибута на f.add = y.add = True
Я бы получил тот же результат, но с x
изменилось на f
.Вместо этого я получаю
[<function x at 0x0000025E793DB510>, <function y at 0x0000025E793DBBF8>, <function f at 0x0000025E793DBA60>]
Учитывая, что новая функция f
отображается в списке, но старая x
все еще там, я думаю, что кэш модуля для скрипта неочищается правильно.
Я вручную очищал рабочее пространство с помощью кнопки ластика на консоли, но я чувствую, что должно быть лучшее решение или, по крайней мере, объяснение того, что происходит.Возможно, это проблема UMR?
Я использую Spyder 3.3.3 со следующим: Python 3.7.3 64-bit |Qt 5.9.6 |PyQt5 5.9.2 |Windows 10, IPython 7.4.9