# Отчёт по Теме 8 Таболин Иван, А-01-23 ## 1. Запуск и первоначальная настройка. ```py import os,sys,importlib os.chdir('C:\\Users\\User\\Desktop\\python-labs\\TEMA8') os.getcwd() 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8' ``` ## 2. Создание и использование модулей. Модуль - любая часть программного кода, записанная в отдельном файле. В языке Python модули являются объектами класса `module`. ## 2.1. Запуск модуля на выполнение путем его импорта. Создан файл Mod1.py c программой: ```py perm1=input('Mod1:Введите значение = ') print('Mod1:Значение perm1=',perm1) ``` Импорт модуля ```py import Mod1 Mod1:Введите значение = 5 Mod1:Значение perm1= 5 type(Mod1) dir(type) ['__abstractmethods__', '__annotations__', '__base__', '__bases__', '__basicsize__', '__call__', '__class__', '__delattr__', '__dict__', '__dictoffset__', '__dir__', '__doc__', '__eq__', '__flags__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__instancecheck__', '__itemsize__', '__le__', '__lt__', '__module__', '__mro__', '__name__', '__ne__', '__new__', '__or__', '__prepare__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__setattr__', '__sizeof__', '__str__', '__subclasscheck__', '__subclasses__', '__subclasshook__', '__text_signature__', '__type_params__', '__weakrefoffset__', 'mro'] Mod1.perm1 '5' ``` Повторное выполнение модуля ```py import Mod1 # запуска модуля не произошло importlib.reload(Mod1) Mod1:Введите значение = 3 Mod1:Значение perm1= 3 Mod1.perm1 '3' ``` ## 2.2. Занесение импортированных модулей в словарь. ```py print(sorted(sys.modules.keys())) ['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ... ``` ```py sys.modules.pop('Mod1') print(sorted(sys.modules.keys())) ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ... import Mod1 Mod1:Введите значение = 35 Mod1:Значение perm1= 35 sys.modules.pop('Mod1') ``` ## 2.3. Запуск модуля на выполнение с помощью функции. Выполняется с помощью функции `exec()` ```py exec(open('Mod1.py').read()) Mod1:Введите значение = 6 Mod1:Значение perm1= 6 Mod1.perm1 '35' exec(open('Mod1.py').read()) Mod1:Введите значение = 44 Mod1:Значение perm1= 44 Mod1.perm1 '35' exec(open('Mod1.py').read()) Mod1:Введите значение = 12 Mod1:Значение perm1= 12 Mod1.perm1 '35' ``` ## 2.4. Использование инструкции `from ... import ...`. Пример 1. ```py from Mod1 import perm1 print(sorted(sys.modules.keys())) ['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ... Mod1.perm1 '35' ``` Пример 2. ```py from Mod2 import beta g=beta(2) ****BETA**** g 535.4916555247646 dir() ['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'beta', 'g', 'importlib', 'os', 'perm1', 'sys'] alpha() Traceback (most recent call last): File "", line 1, in alpha() NameError: name 'alpha' is not defined from Mod2 import alpha as al al() ****ALPHA**** Значение t=55 '55' del al,beta from Mod2 import alpha as al, beta as bt del al,bt from Mod2 import * tt=alpha() ****ALPHA**** Значение t=0.12 uu=beta(float(tt)) ****BETA**** uu 1.4578913609506803 ``` ## 3. Создание многомодульных программ. ## 3.1. Пример простой многомодульной программы. ```py sys.modules.pop('Mod1') sys.modules.pop('Mod2') ``` ```py import Mod0 Mod1:Введите значение = 4 Mod1:Значение perm1= 4 perm1= 4 ****ALPHA**** Значение t=5 tt= 5 ****BETA**** qq= 6635623.99934113 Mod0.tt,Mod0.qq,Mod0.Mod1.perm1 ('5', 6635623.99934113, '4') ``` ## 3.2. Пример. ```py import MM0 y= [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.995050282999456, 7.337875156918653, 10.174309420549172, 10.298227259219182, ... ``` ```py import matplotlib.pyplot as plt y=MM0.MM2.vyhod plt.plot(y) [] plt.show() ``` ![Выходной сигнал](Ris1.png) Выходной сигнал ## 3.3. Области действия объектов в модулях. Новое содержание модуля `Mod2.py`: ```py def alpha(): print('****ALPHA****') t=input('Значение t=') beta(int(t)) return t def beta(q): print('****BETA****') import math expi=q*math.pi return math.exp(expi) ``` Вызов модуля: ```py from Mod2 import * alpha() ****ALPHA**** Значение t=5 ****BETA**** '5' ``` Новое содержимое модуля `Mod2`(вызов `beta` из `alpha`): ```py from Mod2 import * beta(6) ****BETA**** ****ALPHA**** Значение t=5 153552935.39544657 ``` Другой пример - отображение на экране в модуле `Mod0` значения объектов `t` и `expi` Новое содержимое модуля `Mod0` ```py #Модуль Mod0 import Mod1 print('perm1=',Mod1.perm1) from Mod2 import alpha as al tt=al() print('tt=',tt) from Mod2 import beta qq=beta(float(tt)) print('qq=',qq) print(t,expi) ``` Запуск ```py import Mod0 perm1= 4 ****ALPHA**** Значение t=7 tt= 7 ****BETA**** ****ALPHA**** Значение t=6 qq= 3553321280.847041 Traceback (most recent call last): File "", line 1, in import Mod0 File "C:\Users\User\Desktop\python-labs\TEMA8\Mod0.py", line 10, in print(t,expi) NameError: name 't' is not defined ``` Ещё один пример - увеличение в 3 раза значения объекта `perm1` в модуле `Mod0` Новое содержимое модуля `Mod0`: ```py #Модуль Mod0 import Mod1 print('perm1=',Mod1.perm1) Mod1.perm1 = int(Mod1.perm1)*3 from Mod2 import alpha as al tt=al() print('tt=',tt) from Mod2 import beta qq=beta(float(tt)) print('qq=',qq) ``` ```py import Mod0 perm1= 12 3*perm1= 36 ****ALPHA**** Значение t=9 tt= 9 ****BETA**** ****ALPHA**** Значение t=90 qq= 1902773895292.1592 ``` Увеличение в 2 раза объектов `perm`,`tt`,`qq` в командной строке. ```py import Mod0 perm1= 36 3*perm1= 108 ****ALPHA**** Значение t=2 tt= 2 ****BETA**** ****ALPHA**** Значение t=2 qq= 535.4916555247646 Mod0.Mod1.perm1=int(Mod0.Mod1.perm1)*2 Mod0.Mod1.perm1 '216' Mod0.tt=int(Mod0.Mod1.perm1)*2 Mod0.tt 432 Mod0.qq=Mod0.qq*2 Mod0.qq 1070.9833110495292 ```