|
|
# Отчёт по Теме 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)
|
|
|
<class 'module'>
|
|
|
|
|
|
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
|
|
|
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
|
|
|
Mod1.perm1
|
|
|
'3'
|
|
|
```
|
|
|
## 2.2. Занесение импортированных модулей в словарь.
|
|
|
```py
|
|
|
print(sorted(sys.modules.keys()))
|
|
|
['Mod1', '__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ...
|
|
|
```
|
|
|
```py
|
|
|
sys.modules.pop('Mod1')
|
|
|
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
|
|
|
|
|
|
print(sorted(sys.modules.keys()))
|
|
|
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', ...
|
|
|
|
|
|
import Mod1
|
|
|
Mod1:Введите значение = 35
|
|
|
Mod1:Значение perm1= 35
|
|
|
sys.modules.pop('Mod1')
|
|
|
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
|
|
|
```
|
|
|
## 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'
|
|
|
```
|
|
|
`exec()` пытается прочитать файл в кодировке `UTF-8`.
|
|
|
## 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 "<pyshell#52>", line 1, in <module>
|
|
|
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')
|
|
|
<module 'Mod1' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod1.py'>
|
|
|
sys.modules.pop('Mod2')
|
|
|
<module 'Mod2' from 'C:\\Users\\User\\Desktop\\python-labs\\TEMA8\\Mod2.py'>
|
|
|
```
|
|
|
```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)
|
|
|
[<matplotlib.lines.Line2D object at 0x0000015D4E13D950>]
|
|
|
plt.show()
|
|
|
```
|
|
|

|
|
|
|
|
|
Выходной сигнал
|
|
|
## 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 "<pyshell#108>", line 1, in <module>
|
|
|
import Mod0
|
|
|
File "C:\Users\User\Desktop\python-labs\TEMA8\Mod0.py", line 10, in <module>
|
|
|
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
|
|
|
``` |