Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

271 строка
7.4 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Отчёт по Теме 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'
```
## 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()
```
![Выходной сигнал](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 "<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
```