Изменил(а) на 'TEMA8/report.md'

main
TimoshenkoAA 2 месяцев назад
Родитель 5f08387bdc
Сommit 44ab532e74

@ -1,393 +1,393 @@
# Тема 8. Модули и структурирование программы # Тема 8. Модули и структурирование программы
Выполнил: Тимошенко А.А. Выполнил: Тимошенко А.А.
Проверил: Козлюк Д. А. Проверил: Козлюк Д. А.
## Пункт 1. Импорт библиотек ## Пункт 1. Импорт библиотек
``` ```
>>> import os >>> import os
>>> os.chdir("C:/Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8") >>> os.chdir("C:/Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8")
>>> import sys, importlib >>> import sys, importlib
``` ```
## Пункт 2. Создание и использование модулей в среде Python. ## Пункт 2. Создание и использование модулей в среде Python.
### Пункт 2.1. Запуск модуля на выполнение путем его импорта. ### Пункт 2.1. Запуск модуля на выполнение путем его импорта.
Файл mod1.py содержит команды: Файл mod1.py содержит команды:
``` ```
perm1 = input('Mod1: Введите значение = ') perm1 = input('Mod1: Введите значение = ')
print('Mod1: Значение perm1 = ', perm1) print('Mod1: Значение perm1 = ', perm1)
``` ```
Вызов файла как импортируемого модуля: Вызов файла как импортируемого модуля:
``` ```
>>> import mod1 >>> import mod1
Mod1: Введите значение = 5 Mod1: Введите значение = 5
Mod1: Значение perm1 = 5 Mod1: Значение perm1 = 5
>>> mod1.perm1 >>> mod1.perm1
'5' '5'
>>> import mod1 >>> import mod1
>>> import mod1 >>> import mod1
``` ```
Все следующие после первого вызовы не инициируют ввод значения Все следующие после первого вызовы не инициируют ввод значения
perm1. В Python модули импортируются один раз в рамках одного запуска интерпретатора. perm1. В Python модули импортируются один раз в рамках одного запуска интерпретатора.
Если попытаться импортировать модуль повторно, используется уже загруженная версия из кэша. Если попытаться импортировать модуль повторно, используется уже загруженная версия из кэша.
Если нужно повторно импортировать модуль как в первый раз, можно сделать так: Если нужно повторно импортировать модуль как в первый раз, можно сделать так:
``` ```
>>> importlib.reload(mod1) >>> importlib.reload(mod1)
Mod1: Введите значение = 6 Mod1: Введите значение = 6
Mod1: Значение perm1 = 6 Mod1: Значение perm1 = 6
<module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'> <module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'>
>>> mod1.perm1 >>> mod1.perm1
'6' '6'
``` ```
### Пункт 2.2. Словарь импортированных модулей ### Пункт 2.2. Словарь импортированных модулей
``` ```
>>> print(sorted(sys.modules.keys())) >>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', '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') >>> sys.modules.pop('mod1')
<module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'> <module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'>
>>> print(sorted(sys.modules.keys())) >>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
``` ```
Пояснение: принципиальное отличие importlib.reload() от sys.modules.pop() заключается Пояснение: принципиальное отличие importlib.reload() от sys.modules.pop() заключается
в следующем: importlib.reload() перезагружает модуль, выполняя его код заново, но не удаляет модуль из кэша. Он имеет тот же адрес в памяти и все зависимости от него остаются в силе. sys.modules.pop() убирает модуль из кэша, при повторном импорте он уже будет иметь другой адрес, а старые зависимости ссылаются на пустой объект. в следующем: importlib.reload() перезагружает модуль, выполняя его код заново, но не удаляет модуль из кэша. Он имеет тот же адрес в памяти и все зависимости от него остаются в силе. sys.modules.pop() убирает модуль из кэша, при повторном импорте он уже будет иметь другой адрес, а старые зависимости ссылаются на пустой объект.
``` ```
>>> import mod1 >>> import mod1
Mod1: Введите значение = 9 Mod1: Введите значение = 9
Mod1: Значение perm1 = 9 Mod1: Значение perm1 = 9
>>> mod1.perm1 >>> mod1.perm1
'9' '9'
``` ```
### Пункт 2.3. Запуск модуля на выполнение с помощью функции exec(). ### Пункт 2.3. Запуск модуля на выполнение с помощью функции exec().
``` ```
>>> exec(open('mod1.py', encoding='utf-8').read()) >>> exec(open('mod1.py', encoding='utf-8').read())
Mod1: Введите значение = 7 Mod1: Введите значение = 7
Mod1: Значение perm1 = 7 Mod1: Значение perm1 = 7
>>> mod1.perm1 >>> mod1.perm1
'9' '9'
>>> perm1 >>> perm1
'7' '7'
>>> exec(open('mod1.py', encoding='utf-8').read()) >>> exec(open('mod1.py', encoding='utf-8').read())
Mod1: Введите значение = 99 Mod1: Введите значение = 99
Mod1: Значение perm1 = 99 Mod1: Значение perm1 = 99
>>> perm1 >>> perm1
'99' '99'
>>> exec(open('mod1.py', encoding='utf-8').read()) >>> exec(open('mod1.py', encoding='utf-8').read())
Mod1: Введите значение = 40 Mod1: Введите значение = 40
Mod1: Значение perm1 = 40 Mod1: Значение perm1 = 40
>>> perm1 >>> perm1
'40' '40'
``` ```
### Пункт 2.4. Использование инструкции from … import … ### Пункт 2.4. Использование инструкции from … import …
Пример 1. Пример 1.
``` ```
>>> sys.modules.pop('mod1') >>> sys.modules.pop('mod1')
<module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'> <module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'>
>>> print(sorted(sys.modules.keys())) >>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> from mod1 import perm1 >>> from mod1 import perm1
Mod1: Введите значение = 89 Mod1: Введите значение = 89
Mod1: Значение perm1 = 89 Mod1: Значение perm1 = 89
>>> print(sorted(sys.modules.keys())) >>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
>>> perm1 >>> perm1
'89' - измененный объект тоже доступен из глобальной области видимости. '89' - измененный объект тоже доступен из глобальной области видимости.
``` ```
Как видно, объект mod1 всё же появился в sys.modules.keys(). Аналогично обычному import, при первом импорте команда Как видно, объект mod1 всё же появился в sys.modules.keys(). Аналогично обычному import, при первом импорте команда
инициализирует ввод, но при последующих ничего не делает. инициализирует ввод, но при последующих ничего не делает.
Пример 2. Пример 2.
``` ```
>>> from mod2 import beta >>> from mod2 import beta
>>> g = beta(2) >>> g = beta(2)
>>> g >>> g
535.4916555247646 535.4916555247646
>>> print(sorted(sys.modules.keys())) >>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'mod2', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'mod2', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
``` ```
Объект mod2 появился в списке всех модулей. Объект mod2 появился в списке всех модулей.
``` ```
>>> h = alpha(2) >>> h = alpha(2)
Traceback (most recent call last): Traceback (most recent call last):
File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <module>
NameError: name 'alpha' is not defined NameError: name 'alpha' is not defined
``` ```
Импортируем alpha, используя для него псевдоним. Импортируем alpha, используя для него псевдоним.
``` ```
>>> from mod2 import alpha as al >>> from mod2 import alpha as al
>>> al() >>> al()
****ALPHA**** ****ALPHA****
Значение t=90 Значение t=90
'90' '90'
``` ```
Если мы попробуем вызвать функцию по обычному ее имени, ничего не выйдет. Если мы попробуем вызвать функцию по обычному ее имени, ничего не выйдет.
``` ```
>>> alpha() >>> alpha()
Traceback (most recent call last): Traceback (most recent call last):
File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <module>
NameError: name 'alpha' is not defined NameError: name 'alpha' is not defined
``` ```
Так происходит потому, что на этапе преобразования программы в байт-код python связывает Так происходит потому, что на этапе преобразования программы в байт-код python связывает
модуль, найденный в рабочей директории, с именем al. Модуль становится объектом в пространстве имен, модуль, найденный в рабочей директории, с именем al. Модуль становится объектом в пространстве имен,
создаётся ссылка на объект модуля alpha и ему присваивается имя al. Но имя alpha ему НЕ присваивается, создаётся ссылка на объект модуля alpha и ему присваивается имя al. Но имя alpha ему НЕ присваивается,
поэтому обратиться к методам и атрибутам по имени alpha нельзя. поэтому обратиться к методам и атрибутам по имени alpha нельзя.
``` ```
>>> del al, beta >>> del al, beta
>>> from mod2 import alpha as al, beta as bt >>> from mod2 import alpha as al, beta as bt
>>> print(sorted(sys.modules.keys())) >>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'mod2', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod1', 'mod2', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', '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('mod2') >>> sys.modules.pop('mod2')
<module 'mod2' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod2.py'> <module 'mod2' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod2.py'>
>>> sys.modules.pop('mod1') >>> sys.modules.pop('mod1')
<module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'> <module 'mod1' from 'C:\\Users/mapon/OneDrive/Рабочий стол/ПО АС/ТЕМА8\\mod1.py'>
>>> from mod2 import * >>> from mod2 import *
>>> print(sorted(sys.modules.keys())) >>> print(sorted(sys.modules.keys()))
['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod2', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib'] ['__future__', '__main__', '_abc', '_ast', '_bisect', '_bz2', '_codecs', '_collections', '_collections_abc', '_colorize', '_compat_pickle', '_compression', '_datetime', '_frozen_importlib', '_frozen_importlib_external', '_functools', '_heapq', '_imp', '_io', '_lzma', '_opcode', '_opcode_metadata', '_operator', '_pickle', '_pyrepl', '_pyrepl.pager', '_queue', '_random', '_signal', '_sitebuiltins', '_socket', '_sre', '_stat', '_string', '_struct', '_sysconfig', '_thread', '_tkinter', '_tokenize', '_typing', '_warnings', '_weakref', '_weakrefset', '_winapi', '_wmi', 'abc', 'ast', 'bdb', 'binascii', 'bisect', 'builtins', 'bz2', 'codecs', 'collections', 'collections.abc', 'configparser', 'contextlib', 'copyreg', 'datetime', 'dis', 'encodings', 'encodings.aliases', 'encodings.cp1251', '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._abc', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib.machinery', 'importlib.util', 'inspect', 'io', 'ipaddress', 'itertools', 'keyword', 'linecache', 'lzma', 'marshal', 'math', 'mod2', 'nt', 'ntpath', 'opcode', 'operator', 'os', 'os.path', 'pickle', 'pkgutil', 'platform', 'plistlib', 'posixpath', 'pydoc', 'pyexpat', 'pyexpat.errors', 'pyexpat.model', 'queue', 'random', 're', 're._casefix', 're._compiler', 're._constants', 're._parser', 'reprlib', 'select', 'selectors', 'shlex', 'shutil', 'site', 'socket', 'socketserver', 'stat', 'string', 'struct', 'sys', 'sysconfig', 'tempfile', 'textwrap', 'threading', 'time', 'tkinter', 'tkinter.constants', 'token', 'tokenize', 'traceback', 'types', 'typing', 'urllib', 'urllib.parse', 'warnings', 'weakref', 'winreg', 'xml', 'xml.parsers', 'xml.parsers.expat', 'xml.parsers.expat.errors', 'xml.parsers.expat.model', 'zipimport', 'zlib']
``` ```
Протестируем функции после импорта: Протестируем функции после импорта:
``` ```
>>> tt = alpha() >>> tt = alpha()
****ALPHA**** ****ALPHA****
Значение t=0.13 Значение t=0.13
>>> uu = beta(float(tt)) >>> uu = beta(float(tt))
>>> uu >>> uu
1.5044194029024176 1.5044194029024176
``` ```
## Пункт 3. Создание многомодульных программ. ## Пункт 3. Создание многомодульных программ.
### Пункт 3.1. Пример простой многомодульной программы. ### Пункт 3.1. Пример простой многомодульной программы.
Создадим файл mod0.py: Создадим файл mod0.py:
``` ```
import mod1 import mod1
print('perm1 = ', mod1.perm1) print('perm1 = ', mod1.perm1)
from mod2 import alpha as al from mod2 import alpha as al
tt = al() tt = al()
print('tt = ', tt) print('tt = ', tt)
from mod2 import beta from mod2 import beta
qq=beta(float(tt)) qq=beta(float(tt))
print('qq = ', qq) print('qq = ', qq)
``` ```
Вызовем его в терминале, предварительно убедившись, что ни один Вызовем его в терминале, предварительно убедившись, что ни один
из трех модулей не упоминается в sys.modules.keys(): из трех модулей не упоминается в sys.modules.keys():
``` ```
>>> import mod0 >>> import mod0
Mod1: Введите значение = 8 Mod1: Введите значение = 8
Mod1: Значение perm1 = 8 Mod1: Значение perm1 = 8
perm1 = 8 perm1 = 8
****ALPHA**** ****ALPHA****
Значение t=2 Значение t=2
tt = 2 tt = 2
qq = 535.4916555247646 qq = 535.4916555247646
``` ```
Теперь обратимся к каждому из объектов в рабочем пространстве: Теперь обратимся к каждому из объектов в рабочем пространстве:
``` ```
>>> mod0.tt >>> mod0.tt
'2' '2'
>>> mod0.qq >>> mod0.qq
535.4916555247646 535.4916555247646
``` ```
Обращение к perm1 выглядит несколько иначе: Обращение к perm1 выглядит несколько иначе:
``` ```
>>> mod0.perm1 >>> mod0.perm1
Traceback (most recent call last): Traceback (most recent call last):
File "<stdin>", line 1, in <module> - неверно File "<stdin>", line 1, in <module> - неверно
AttributeError: module 'mod0' has no attribute 'perm1' AttributeError: module 'mod0' has no attribute 'perm1'
>>> mod0.mod1.perm1 >>> mod0.mod1.perm1
'8' - верно '8' - верно
``` ```
Ошибка возникает, потому что переменная perm1 находится в пространстве имен Ошибка возникает, потому что переменная perm1 находится в пространстве имен
модуля mod1, а не модуля mod0. Чтобы сделать её доступной через mod0, нужно явно модуля mod1, а не модуля mod0. Чтобы сделать её доступной через mod0, нужно явно
импортировать её с помощью такой строки: импортировать её с помощью такой строки:
from mod1 import perm1. from mod1 import perm1.
### Пункт 3.2. ### Пункт 3.2.
Файл mm0.py: Файл mm0.py:
``` ```
import mm2 import mm2
print('y =', mm2.vyhod) print('y =', mm2.vyhod)
``` ```
Файл mm1.py: Файл mm1.py:
``` ```
def realdvig(xtt,kk1,TT,yti1,ytin1): def realdvig(xtt,kk1,TT,yti1,ytin1):
#Модель реального двигателя #Модель реального двигателя
yp = kk1 * xtt #усилитель yp = kk1 * xtt #усилитель
yti1 = yp + yti1 #Интегратор yti1 = yp + yti1 #Интегратор
ytin1 = (yti1+TT*ytin1)/(TT+1) ytin1 = (yti1+TT*ytin1)/(TT+1)
return [yti1, ytin1] return [yti1, ytin1]
def tahogen(xtt,kk2,yti2): def tahogen(xtt,kk2,yti2):
#Модель тахогенератора #Модель тахогенератора
yp = kk2 * xtt #усилитель yp = kk2 * xtt #усилитель
yti2 = yp + yti2 #интегратор yti2 = yp + yti2 #интегратор
return yti2 return yti2
def nechus(xtt,gran): def nechus(xtt,gran):
if (xtt < gran) and (xtt > (-gran)): if (xtt < gran) and (xtt > (-gran)):
ytt = 0 ytt = 0
elif xtt >= gran: elif xtt >= gran:
ytt = xtt - gran ytt = xtt - gran
elif xtt <= (-gran): elif xtt <= (-gran):
ytt = xtt + gran ytt = xtt + gran
return ytt return ytt
``` ```
Файл mm2.py: Файл mm2.py:
``` ```
znach = input('k1,T,k2,Xm,A,F,N=').split(',') znach = input('k1,T,k2,Xm,A,F,N=').split(',')
k1 = float(znach[0]) k1 = float(znach[0])
T = float(znach[1]) T = float(znach[1])
k2 = float(znach[2]) k2 = float(znach[2])
Xm = float(znach[3]) Xm = float(znach[3])
A = float(znach[4]) A = float(znach[4])
F = float(znach[5]) F = float(znach[5])
N = int(znach[6]) N = int(znach[6])
import math import math
vhod = [] vhod = []
for i in range(N): for i in range(N):
vhod.append(A*math.sin((2*i*math.pi)/F)) vhod.append(A*math.sin((2*i*math.pi)/F))
import mm1 as mod import mm1 as mod
yi1 = 0; yin1 = 0; yi2 = 0 yi1 = 0; yin1 = 0; yi2 = 0
vyhod=[] vyhod=[]
for xt in vhod: for xt in vhod:
xt1 = xt - yi2 #отрицательная обратная связь xt1 = xt - yi2 #отрицательная обратная связь
[yi1,yin1] = mod.realdvig(xt1,k1,T,yi1,yin1) [yi1,yin1] = mod.realdvig(xt1,k1,T,yi1,yin1)
yi2 = mod.tahogen(yin1,k2,yi2) yi2 = mod.tahogen(yin1,k2,yi2)
yt = mod.nechus(yin1,Xm) yt = mod.nechus(yin1,Xm)
vyhod.append(yt) vyhod.append(yt)
``` ```
Тестирование: Тестирование:
```
k1,T,k2,Xm,A,F,N=9,6,4,11,3,0.5,1500 k1,T,k2,Xm,A,F,N=9,6,4,11,3,0.5,1500
y = [0, 0, ... 0, -70.20177063675057, 0, 257.73311334096866, -677.4095530135962, ... -6.270038281034423e+306, -1.198995988522659e+307] y = [0, 0, ... 0, -70.20177063675057, 0, 257.73311334096866, -677.4095530135962, ... -6.270038281034423e+306, -1.198995988522659e+307]
```
### Области действия объектов в модулях: ### Области действия объектов в модулях:
Обращение в функции alpha к функции beta: Обращение в функции alpha к функции beta:
``` ```
def alpha(): def alpha():
print('****ALPHA****') print('****ALPHA****')
t=input('Значение t=') t=input('Значение t=')
beta(int(t)) beta(int(t))
return t return t
def beta(q): def beta(q):
import math import math
expi=q*math.pi expi=q*math.pi
return math.exp(expi) return math.exp(expi)
``` ```
Тестирование: Тестирование:
``` ```
Mod1: Введите значение = 8 Mod1: Введите значение = 8
Mod1: Значение perm1 = 8 Mod1: Значение perm1 = 8
perm1 = 8 perm1 = 8
****ALPHA**** ****ALPHA****
Значение t=4 Значение t=4
tt = 4 tt = 4
qq = 286751.31313665316 qq = 286751.31313665316
``` ```
Обращение в функции beta к функции alpha: Обращение в функции beta к функции alpha:
``` ```
def alpha(): def alpha():
print('****ALPHA****') print('****ALPHA****')
t=input('Значение t=') t=input('Значение t=')
return t return t
def beta(q): def beta(q):
import math import math
expi = int(alpha())*math.pi expi = int(alpha())*math.pi
return math.exp(expi) return math.exp(expi)
``` ```
Тестирование: Тестирование:
``` ```
Mod1: Введите значение = 8 Mod1: Введите значение = 8
Mod1: Значение perm1 = 8 Mod1: Значение perm1 = 8
perm1 = 8 perm1 = 8
****ALPHA**** ****ALPHA****
Значение t=4 Значение t=4
tt = 4 tt = 4
****ALPHA**** ****ALPHA****
Значение t=4 Значение t=4
qq = 286751.31313665316 qq = 286751.31313665316
``` ```
Ввод запускается два раза - первый от самой функции alpha, а второй - от той, которая Ввод запускается два раза - первый от самой функции alpha, а второй - от той, которая
упоминалась в beta. упоминалась в beta.
Отобразить на экране в модуле Mod0 значения объектов t и expi: Отобразить на экране в модуле Mod0 значения объектов t и expi:
Одна из попыток: Одна из попыток:
``` ```
#Модуль mod0 #Модуль mod0
import mod1 import mod1
print('perm1 = ', mod1.perm1) print('perm1 = ', mod1.perm1)
from mod2 import alpha as al from mod2 import alpha as al
tt = al() tt = al()
print('tt = ', tt) print('tt = ', tt)
from mod2 import beta from mod2 import beta
qq=beta(float(tt)) qq=beta(float(tt))
print('qq = ', qq) print('qq = ', qq)
print(f't = {al.t}, expi = {beta.expi}') print(f't = {al.t}, expi = {beta.expi}')
Traceback (most recent call last): Traceback (most recent call last):
File "C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА8\mod0.py", line 9, in <module> File "C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА8\mod0.py", line 9, in <module>
print(f't = {al.t}, expi = {beta.expi}') print(f't = {al.t}, expi = {beta.expi}')
AttributeError: 'function' object has no attribute 't' AttributeError: 'function' object has no attribute 't'
``` ```
Не получится вызвать эти переменные по их непосредственному имени (t и expi), Не получится вызвать эти переменные по их непосредственному имени (t и expi),
упоминая объекты, атрибутами которых они являются, без изменения кода (например, упоминая объекты, атрибутами которых они являются, без изменения кода (например,
объявления t в alpha как глобальную переменную, или задание его как метода. объявления t в alpha как глобальную переменную, или задание его как метода.
Но, так как мы знаем, что alpha возвращает t, то узнать t можем по имени al. Но, так как мы знаем, что alpha возвращает t, то узнать t можем по имени al.
С expi и beta так не получится: С expi и beta так не получится:
``` ```
Traceback (most recent call last): Traceback (most recent call last):
File "C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА8\mod0.py", line 10, in <module> File "C:\Users\mapon\OneDrive\Рабочий стол\ПО АС\ТЕМА8\mod0.py", line 10, in <module>
print(f't = {al}, expi = {beta.expi}') print(f't = {al}, expi = {beta.expi}')
^^^^^^^^^ ^^^^^^^^^
AttributeError: 'function' object has no attribute 'expi' AttributeError: 'function' object has no attribute 'expi'
``` ```
В модуле Mod0 увеличить в 3 раза значение В модуле Mod0 увеличить в 3 раза значение
объекта perm1 и отобразить его после этого на экране. объекта perm1 и отобразить его после этого на экране.
Так как perm1 имеет тип str, то умножение напрямую без преобразования типов Так как perm1 имеет тип str, то умножение напрямую без преобразования типов
будет выглядеть так: будет выглядеть так:
``` ```
... ...
print('perm1 = ', mod1.perm1) print('perm1 = ', mod1.perm1)
print('Умножено:' , mod1.perm1 * 3) print('Умножено:' , mod1.perm1 * 3)
... ...
Mod1: Введите значение = 4 Mod1: Введите значение = 4
Mod1: Значение perm1 = 4 Mod1: Значение perm1 = 4
perm1 = 4 perm1 = 4
Умножено: 444 Умножено: 444
``` ```
Преобразовав тип perm1, можно получить классическое умножение: Преобразовав тип perm1, можно получить классическое умножение:
``` ```
... ...
print('Умножено:' , int(mod1.perm1) * 3) print('Умножено:' , int(mod1.perm1) * 3)
... ...
Mod1: Введите значение = 4 Mod1: Введите значение = 4
Mod1: Значение perm1 = 4 Mod1: Значение perm1 = 4
perm1 = 4 perm1 = 4
Умножено: 12 Умножено: 12
``` ```
В командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq: В командной строке (в главном модуле) увеличить в 2 раза значения объектов perm1, tt, qq:
``` ```
>>> mod1.perm1 * 2 >>> mod1.perm1 * 2
'55' '55'
>>> mod0.tt * 2 >>> mod0.tt * 2
'44' '44'
>>> mod0.qq * 2 >>> mod0.qq * 2
573502.6262733063 573502.6262733063
``` ```
perm1 и tt, как упоминалось ранее, имеют строковый тип, так что умножение perm1 и tt, как упоминалось ранее, имеют строковый тип, так что умножение
дублирует содержимое строки. дублирует содержимое строки.

Загрузка…
Отмена
Сохранить