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

295 строки
11 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
Савин Семён, А-02-23
## Пункт 1. Подготовка к работе.
```py
>>> import os,sys
>>> import importlib as imp
>>> os.chdir('C:\\Users\\somas\\python-labs\\TEMA8')
>>> os.getcwd()
'C:\\Users\\somas\\python-labs\\TEMA8'
```
## Пункт 2.1. Запуск модуля на выполнение путем его импорта
![Скриншот содержимого файла Mod1.py](img1.png)
```py
>>> import Mod1
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
>>> type(Mod1)
<class 'module'>
>>> dir(Mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'perm1']
>>> Mod1.perm1
'5'
>>> import Mod1
>>> imp.reload(Mod1)
Mod1:Введите значение = 3
Mod1:Значение perm1= 3
<module 'Mod1' from 'C:\\Users\\somas\\python-labs\\TEMA8\\Mod1.py'>
>>> Mod1.perm1
'3'
```
## 2.2. Удаление модуля из словаря
```py
>>> print(sorted(sys.modules.keys()))
['Mod1', '__main__', '_abc', '_ast', '_bisect', '_bootlocale', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha512', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_thread', '_tkinter', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'msvcrt', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'signal', 'site', 'socket', 'socketserver', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'string', 'struct', 'subprocess', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\somas\\python-labs\\TEMA8\\Mod1.py'>
>>> print(sorted(sys.modules.keys()))
['__main__', '_abc', '_ast', '_bisect', '_bootlocale', '_bz2', '_codecs', '_collections', '_collections_abc', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_locale', '_lzma', '_opcode', '_operator', '_pickle', '_queue', '_random', '_sha512', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_thread', '_tkinter', '_warnings', '_weakref', '_weakrefset', '_winapi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', 'encodings.latin_1', 'encodings.utf_8', 'enum', 'errno', 'fnmatch', 'functools', 'genericpath', 'heapq', 'idlelib', 'idlelib.autocomplete', 'idlelib.autocomplete_w', 'idlelib.calltip', 'idlelib.calltip_w', 'idlelib.config', 'idlelib.debugger', 'idlelib.debugger_r', 'idlelib.debugobj', 'idlelib.debugobj_r', 'idlelib.hyperparser', 'idlelib.iomenu', 'idlelib.macosx', 'idlelib.multicall', 'idlelib.pyparse', 'idlelib.rpc', 'idlelib.run', 'idlelib.scrolledlist', 'idlelib.stackviewer', 'idlelib.tooltip', 'idlelib.tree', 'idlelib.util', 'idlelib.window', 'idlelib.zoomheight', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.abc', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'msvcrt', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'signal', 'site', 'socket', 'socketserver', 'sre_compile', 'sre_constants', 'sre_parse', 'stat', 'string', 'struct', 'subprocess', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'typing.io', 'typing.re', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> import Mod1
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\somas\\python-labs\\TEMA8\\Mod1.py'>
```
## 2.3. Запуск модуля с помощью exec
```py
>>> exec(open('Mod1.py').read())
Mod1:РведиСРµ Р·РЅР°Сение = 8
Mod1:РРЅР°Сение perm1= 8
>>> exec(open('Mod1.py', encoding= 'utf-8').read())
Mod1:Введите значение = 4
Mod1:Значение perm1= 4
>>> exec(open('Mod1.py', encoding= 'utf-8').read())
Mod1:Введите значение = 50
Mod1:Значение perm1= 50
>>> exec(open('Mod1.py', encoding= 'utf-8').read())
Mod1:Введите значение = 10
Mod1:Значение perm1= 10
```
## 2.4. Запуск модуля с помощью from - import
```py
>>> from Mod1 import perm1
Mod1:Введите значение = 1
Mod1:Значение perm1= 1
>>> dir()
['Mod1', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__warningregistry__', 'imp', 'os', 'perm1', 'sys']
>>> perm1
'1'
```
![Скриншот содержания файла Mod2.py](img2.png)
```py
>>> from Mod2 import beta
>>> g=beta(2)
****BETA****
>>> g
535.4916555247646
>>> alpha()
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
alpha()
NameError: name 'alpha' is not defined
>>> from Mod2 import alpha
>>> from Mod2 import alpha as al
>>> al()
****ALPHA****
Значение t=5
'5'
>>> del al,beta
>>> from Mod2 import alpha as al, beta as bt
>>> from Mod2 import *
>>> tt=alpha()
****ALPHA****
Значение t=0.12
>>> uu=beta(float(tt))
****BETA****
>>> uu
1.4578913609506803
>>>
```
## 3.1. Создание многомодульных программ
![Скриншот содержимого файла Mod0.py](img3.png)
```py
>>> sys.modules.pop('Mod1')
<module 'Mod1' from 'C:\\Users\\somas\\python-labs\\TEMA8\\Mod1.py'>
>>> sys.modules.pop('Mod2')
<module 'Mod2' from 'C:\\Users\\somas\\python-labs\\TEMA8\\Mod2.py'>
>>> import Mod0
Mod1:Введите значение = 10
Mod1:Значение perm1= 10
perm1= 10
****ALPHA****
Значение t=6
tt= 6
****BETA****
qq= 153552935.39544657
>>> Mod0.tt; Mod0.qq; Mod0.Mod1.perm1
'6'
153552935.39544657
'10'
```
## 3.2. Создание модулей и реализация программы модели САУ
![Скриншот содержания файла MM1.py](img4.png)
```py
>>> import MM2
k1,T,k2,Xm,A,F,N=0.4, 30, 0.6, 6, 1000, 7, 16
>>> print('y=', MM2.vyhod)
y= [0, 4.088148160877804, 26.352485391214998, 53.16854540749361, 72.7344196620431, 77.69321318122259, 70.35974149591577, 60.62750525878967, 58.14620628522886, 64.67689441760423, 72.40046930133941, 69.47447962424967, 48.67692603876396, 12.652572207611655, -16.163653614270103, -51.357437173804996]
```
## 3.3. Области действия объектов в модулях
Была изменена функция alpha в файле Mod2.py
```py
def alpha():
print('****ALPHA****')
t=input('Значение t=')
n=beta(6)
print(n)
return t
```
После запуска модуля
```py
>>> alpha()
****ALPHA****
Значение t=10
****BETA****
153552935.39544657
'10'
```
Убрали изменения из alpha, изменили beta
```py
def beta(q):
print('****BETA****')
import math
expi=q*math.pi
alpha()
return math.exp(expi)
```
результат
```py
>>> beta(6)
****BETA****
****ALPHA****
Значение t=10
153552935.39544657
```
Добавили функцию печати в Mod0
```py
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
Mod1:Введите значение = 10
Mod1:Значение perm1= 10
perm1= 10
****ALPHA****
Значение t=10
tt= 10
****BETA****
****ALPHA****
Значение t=10
qq= 44031505860631.98
Traceback (most recent call last):
File "C:\Users\somas\python-labs\TEMA8\Mod0.py", line 9, in <module>
print(t,expi)
NameError: name 't' is not defined
```
В модуле Mod0 perm1 была увеличена в 3 раза
```py
Mod1:Введите значение = 10
Mod1:Значение perm1= 10
perm1= 10
****ALPHA****
Значение t=8
tt= 8
****BETA****
qq= 82226315585.59491
perm1*3= 101010
```
так получилось, так как perm1 - строка
изменим qq,tt,perm1 в командной строке
```py
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
perm1= 5
****ALPHA****
Значение t=8
tt= 8
****BETA****
qq= 82226315585.59491
>>> perm1 = perm1*2
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
perm1 = perm1*2
NameError: name 'perm1' is not defined
>>> tt = tt*2
>>> tt
'88'
>>> qq = qq*2; qq
164452631171.18982
```
теперь изменим Mod0.py так, чтобы perm1 можно было изменить
```py
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)
perm1 = Mod1.perm1
```
результат:
```py
Mod1:Введите значение = 5
Mod1:Значение perm1= 5
perm1= 5
****ALPHA****
Значение t=10
tt= 10
****BETA****
qq= 44031505860631.98
>>> perm1 = perm1*2
>>> perm1
'55'
```