Как работает функция reload()?
Эта функция нужна для того, чтобы перезагрузить изменившийся код из py-файла без рестарта интерпретатора.
Дело в том, что любой импортированный модуль при повторном импорте не будет перечитывать файл. Функция импорта вернёт уже загруженный в память объект модуля. Чтобы обновить код, нужно либо перезапустить всю программу, либо использовать функцию reload()
from importlib import reload
reload(my_module)
🔸 Функция reload() принимает в качестве аргумента только объект модуля или пакета. Она не может перезагрузить класс или функцию. Только весь файл целиком!
🔸 Перезагрузка пакета перезагрузит только его файл __init__.py, если он есть. Но не вложенные модули.
🔸Она не может перезагрузить ранее не импортированный модуль.
🔸При вызове функция reload() перечитывает и перекомпилирует код в файле, создавая новые объекты. После создания новых объектов перезаписывается ранее созданный неймспейс этого модуля.
Это значит, что если где-то этот модуль импортирован через import и обращение к атрибутам происходит через неймспейс (имя) модуля, то такие атрибуты обновятся.
Если какие-либо объекты из этого модуля импортированы через from то они будут ссылаться на старые объекты.
Напишем простой модуль
# mymodule.py
x = 1
Теперь импортируем модуль и отдельно переменную х из модуля
>>> import mymodule
>>> from mymodule import x
>>> print(mymodule.x)
1
>>> print(x)
1
Не перезапуская интерпретатор вносим изменения в модуль
# mymodule.py
x = 2
Делаем перезагрузку модуля и проверяем х ещё раз
>>> reload(mymodule)
>>> print(mymodule.x)
2
>>> print(x)
1
То же самое будет если присвоить любой объект переменной (даже словарь или список)
Повторный импорт обновляет значение
>>> from mymodule import x
>>> print(x)
2
🔸Созданные инстансы классов не обновятся после перезагрузки модуля. Их придётся пересоздать.
#tricks#basic
Однако у Скотта получился один из лучших фильмов о гонках всех времён. Да, где-то скомканный и сумбурный, но при этом невероятно мощный и драйвовый. С фирменным режиссерским стилем, с классным актерским ансамблем, а также великолепной музыкой Ханса Циммера (и гитарной партией Джеффа Бека). И с такой химией между Томом Крузом и Николь Кидман, что экран дымится даже сейчас — когда все страсти уже давным-давно улеглись, и мы все знаем, чем закончилась история одного из самых красивых голливудских браков 90-х.
Вот что бывает, когда за дело берутся по-настоящему талантливые люди, даже если и процесс у них идет с такими сложностями.
#ВИДЕОТЕКА
#DaysOfThunder
#ДниГрома
#TomCruise
#ТомКруз
#NicoleKidman
#НикольКидман
#RobertDuvall
#MichaelRooker
#CaryElwes
#TonyScott
«Вы смотрите на игру какого-то актера, наблюдаете эмоции, которые он вкладывает в роль — и узнаете его как человека. Лучше так, чем рассказывать в интервью о том, кто ты и с кем ты».
Николь Кидман сегодня исполнилось 58 лет.
#ВИДЕОТЕКА
#NicoleKidman
#DeadCalm
#DaysOfThunder
#FarAndAway
#BatmanForever
#EyesWideShut
#MoulinRouge
#TheOthers
#TheHours
#GraceOfMonaco
#Babygirl
«Самое страшное в моей жизни — это первое утро съемок всех моих фильмов. Это страх неудачи, потери лица и чувство вины из-за того, что все верят в тебя, и ты вдруг не справишься».
Сегодня исполнился 81 год со дня рождения легендарного режиссера Тони Скотта
#ВИДЕОТЕКА
#TonyScott
#TopGun
#DaysOfThunder
#TrueRomance
#EnemyOfTheState
#ManOnFire
#Domino
#TheTakingOfPelham123
#TomCruise
#WillSmith
#DenzelWashington
#JerryBruckheimer
#KeiraKnightley
«Я живу на холме в далекой, далекой глубинке. Поэтому не так уж и много людей приходят ко мне в гости. В такую глушь добираются лишь единицы. Но когда кто-то все же приходит, я волей-неволей становлюсь немного подозрительным».
Сегодня исполнилось 95 лет Роберту Дювалю.
#ВИДЕОТЕКА
#RobertDuvall
#РобертДюваль
#TheGodfather
#КрестныйОтец
#ApocalypseNow
#АпокалипсисСегодня
#Colors
#Цвета
#LonesomeDove
#ОдинокийГолубь
#DaysOfThunder
#ДниГрома
#FallingDown
#СМеняХватит
#WeOwnTheNight
#ХозяеваНочи
#JackReacher
#ДжекРичер
#TheJudge
#Судья
#Hustle
#ПрорватьсяВНБА