🐍 Укус питона 🐍
2.91K subscribers
723 photos
4 videos
278 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
Определение и подключение модулей.

Модуль в языке Python представляет отдельный файл с кодом, который можно повторно использовать в других программах.

Для создания модуля необходимо создать файл с расширением *.py, который будет представлять модуль. Затем в этом файле надо определить одну или несколько функций.

Допустим, основной файл программы называется main.py. И мы хотим подключить к нему внешние модули.

Для этого сначала определим новый модуль: создадим в той же папке, где находится main.py, новый файл, который назовем message.py. По умолчанию интерпретатор Python ищет модули по ряду стандартных путей, один из которых - это папка главного, запускаемого скрипта. Поэтому, чтобы интерпретатор подхватил модуль message.py, для простоты оба файла поместим в один проект.

Модуль будет называться message. Определим в нем следующий код:

Здесь определена переменная hello и функция print_message, которая в качестве параметра получает текст и выводит его на консоль.

🐍 Укус питона // 💬 Чат // #теория #модули
Что выдает следующая функция списка?
Anonymous Quiz
15%
[20, 30, 40, 50] [10, 20, 40]
12%
[10, 20, 30, 40] [10, 20, 30, 50]
73%
[10, 20, 30, 40] [10, 20, 40]
Определение и подключение модулей. Продолжение.

В основном файле программы - main.py используем данный модуль, смотрим код:

Для использования модуля его надо импортировать с помощью оператора import, после которого указывается имя модуля: import message.

Чтобы обращаться к функциональности модуля, нам нужно получить его пространство имен. По умолчанию оно будет совпадать с именем модуля, то есть в нашем случае также будет называться message.

Получив пространство имен модуля, мы сможем обратиться к его функциям по схеме пространство_имен.функция

Например, обращение к функции print_message() из модуля message, вторая часть примера:

И после этого мы можем запустить главный скрипт main.py, и он задействует модуль message.py. В частности, консольный вывод будет следующим:
Hello all
Message: Hello work

🐍 Укус питона // 💬 Чат // #теория #модули
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь учить Python и не тратить десятки часов на поиск годных уроков?

Тогда залетай на Python | Notes — канал с видеогайдами и уроками по питону, созданный для эффективного и интересного изучения языка: от функций ввода-вывода к реализации интерфейсов и написанию ботов и нейронных сетей

Сложные моменты разбираются на простых примерах — подойдет даже тем, кто не знает основ. Для мидлов и сеньоров публикуют отдельные интересности

Интересное обучение — эффективное обучение. Присоединяйся!
Что выведет этот код?
Anonymous Quiz
10%
HelloPython-
71%
Hello-Python
19%
-HelloPython
Подключение функциональности модуля в глобальное пространство имен.

Другой вариант настройки предполагает импорт функциональности модуля в глобальное пространство имен текущего модуля с помощью ключевого слова from, смотрим пример:

В данном случае мы импортируем из модуля message в глобальное пространство имен функцию print_message(). Поэтому мы сможем ее использовать без указания пространства имен модуля как если бы она была определена в этом же файле.

Все остальные функции, переменные из модуля недоступны (как например, в примере выше переменная hello). Если мы хотим их также использовать, то их можно подключить по отдельности, вторая часть кода:

🐍 Укус питона // 💬 Чат // #теория #модули
Что выведет этот код?
Anonymous Quiz
29%
P 8 Y 16
13%
P 12
59%
Y 16
🎁С наступающим Новым годом!

От лица канала поздравляем вас с праздниками! Желаем вам уйму знаний и полезных навыков.

Пусть в новом году ваши проекты будут успешными а профессионализм растет в геометрической прогрессии.

С любовью, Укус питона.

🐍 Укус питона
Подключение функциональности модуля в глобальное пространство имен. Продолжение.

Если необходимо импортировать в глобальное пространство имен весь функционал, то вместо названий отдельных функций и переменных можно использовать символ зводочки *, смотрим код:

Но стоит отметить, что импорт в глобальное пространство имен чреват коллизиями имен функций. Например, если у нас том же файле определена функция с тем же именем до ее вызова, то будет вызываться функция, которая определена последней, вторая часть:

Все остальные функции, переменные из модуля недоступны (как например, в примере выше переменная hello). Если мы хотим их также использовать, то их можно подключить по отдельности, вторая часть кода:

Таким образом, одноименная функция текущего файла скрывает функцию из подключенного модуля.

🐍 Укус питона // 💬 Чат // #теория #модули
Что выведет этот код?
Anonymous Quiz
4%
100 500
23%
10 50
73%
None
Имя модуля.

Модуль main.py является главным и использует модуль message.py. При запуске модуля main.py программа выполнит всю необходимую работу. Однако, если мы запустим отдельно модуль message.py сам по себе, то ничего на консоли не увидим. Модуль message просто определяет функцию и переменную и не выполняет никаких действий. Мы можем сделать так, чтобы модуль message.py мог использоваться как сам по себе, так и подключаться в другие модули.

При выполнении модуля среда определяет его имя и присваивает его глобальной переменной name (с обеих сторон по два подчеркивания). Если модуль является запускаемым, то его имя равно main (также по два подчеркивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения py. И мы можем это использовать. Так, изменим содержимое файла message.py, смотрим код:

🐍 Укус питона // 💬 Чат // #теория #модули
Что выведет этот код?
Anonymous Quiz
2%
66 0
30%
36 0
4%
66 3
65%
36 3
Имя модуля. Продолжение.

Следует обратить внимание на вызов функции main, первая часть кода:

Переменная name указывает на имя модуля. Для главного модуля, который непосредственно запускается, эта переменная всегда будет иметь значение main вне зависимости от имени файла.

Поэтому, если мы будем запускать скрипт message.py отдельно, сам по себе, то Python присвоит переменной name значение main, далее в выражении if вызовет функцию main из этого же файла. Однако если мы будем запускать другой скрипт, а этот - message.py - будем подключать в качестве вспомогательного, для message.py переменная name будет иметь значение message. И соответственно метод main в файле message.py не будет работать.

Данный подход с проверкой имени модуля является более рекомендуемым подходом, чем просто вызов метода main. В файле main.py также можно сделать проверку на то, является ли модуль главным (хотя в прицнипе это необязательно), вторая часть кода:

🐍 Укус питона // 💬 Чат // #теория #модули