ОСНОВНОЕ

WORDPRESS

Операционные системы

Базы данных

Фреймворк Bootstrap

Публика — это грязь, которую месят и из которой лепят себе читателей (Ж. и Э. Гонкуры).

Python 3 – Модули

FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Python 3 - Модули
Модуль позволяет логически организованный код на Python. Группировка связанного кода в модуль делает код проще для понимания и использования. Модуль представляет собой объект Python с произвольно названными атрибутами, которые могут связать и ссылка.

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

Пример

Код Python для модуля с именем aname обычно находится в файле namedaname.py. Вот пример простого модуля, support.py:

 

Заявление import

Вы можете использовать любой исходный файл Python как модуль, выполнив оператор import: в исходном файле Python. import имеет следующий синтаксис:

 

Когда интерпретатор встречает оператор import, он импортирует модуль, если модуль присутствует в пути поиска. Путь поиска представляет собой список каталогов, в которых интерпретатор ищет, прежде чем импортировать модуль. Например, чтобы импортировать модуль hello.py, необходимо поместить следующую команду в верхней части сценария:

 

Когда этот код выполниться, он произведет следующий результат:

 

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

Заявление from … import

Python из личных данных позволяет импортировать определенные атрибуты из модуля в текущее пространство имен. from … import имеет следующий синтаксис:

 

Например, чтобы импортировать функцию Fibonacci из модуля fib, используйте следующее заявление:

 

Это утверждение не импортирует весь модуль fib в текущее пространство имен; он просто вводит пункт Фибоначчи модуля fib в глобальную таблицу символов модуля импорта.

Заявление from … import *

Кроме того, можно импортировать все имена из модуля в текущее пространство имен, используя следующий оператор импорта:

 

Это обеспечивает легкий способ импортировать все элементы из модуля в текущее пространство имен; Однако, это утверждение следует использовать с осторожностью.

Выполнение модулей в качестве сценариев

Внутри модуля, имя модуля (в виде строки) доступно в качестве значения глобальной переменной __name__. Код в модуле будет выполняться так же, как если вы импортировали его, но с __name__ установлен в положение «__main__».

Добавьте этот код в конце вашего модуля:

 

При выполнении приведенного выше кода, будет отображаться следующий вывод.

 

Расположение модулей

При импорте модуля, ведется поиск интерпретатора Python для модуля в следующей последовательности:

  • Текущий каталог.
  • Если модуль не найден, Python ищет каждый каталог в переменную оболочки PYTHONPATH.
  • Если все остальное терпит неудачу, Python проверяет путь по умолчанию. В UNIX, этот путь по умолчанию, как правило, /usr/local/lib/python3/.

Модуль поиска пути хранится в модуле системы SYS в переменной sys.path. Переменная sys.path содержит текущий каталог, PYTHONPATH, и установки в зависимости от значения по умолчанию.

Переменная PYTHONPATH

PYTHONPATH это переменная окружения, состоящее из списка каталогов. Синтаксис PYTHONPATH такой же, как и у переменной оболочки PATH.

Вот типичный PYTHONPATH из системы Windows:

 

А вот типичный PYTHONPATH из системы UNIX:

 

Обзор пространства имен

Переменные имена (идентификаторы), которые ссылаются на объекты. namespace является словарем имен переменных (ключи) и их соответствующих объектов (ценности).

  • Оператор Python может получить доступ к переменной в local namespace и в global namespace. Если локальная и глобальная переменная имеет то же имя, локальная переменная замещает глобальную переменную.
  • Каждая функция имеет свое собственное локальное пространство имен. Методы класса следуют тому же правилу области действия, что и обычные функции.
  • Python делает обоснованные предположения о том, какие переменные являются локальными или глобальными. Он предполагает, что любой переменной, которой присваивается значение функции является локальным.
  • Поэтому для того, чтобы присвоить значение глобальной переменной внутри функции, вы должны сначала использовать глобальное заявление.
  • Оператор statement global VarName говорит Python, что VarName является глобальной переменной. Python прекращает поиск в локальном пространство имен для переменной.

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

Тем не менее, мы получили доступ к значению локальных переменных Money перед его установкой, так что результат UnboundLocalError. Раскомментированное глобальное заявление устраняет проблему.

 

Функция dir()

Встроенная функция dir() возвращает отсортированный список строк, содержащих имена, определенные в модуле.

Список содержит имена всех модули, переменных и функций, определенные в модуле. Ниже приведен простой пример:

 

Когда этот код выполниться, он произведет следующий результат:

 

Здесь переменная __name__ специальная строка, которая является именем модуля, и __FILE__ это имя файла, из которого был загружен модуль.

Функции globals() и locals()

Функции globals() и locals() могут быть использованы для возвращения имен в глобальных и локальных пространствах имен в зависимости от места, откуда они называются.

  • Если locals() вызывается из функции, он будет возвращать все имена, которые могут быть доступны локально из этой функции.
  • Если  globals()  вызываются из функции, он будет возвращать все имена, которые могут быть доступны глобально из этой функции.

Возвращаемый тип обеих функций словарь. Таким образом, имена могут быть извлечены с помощью функции keys().

Функция reload()

Когда модуль импортируется в сценарий, код на участке модуля верхнего уровня выполняется только один раз.

Поэтому, если вы хотите повторно выполнить код верхнего уровня в модуле, вы можете использовать функцию reload(). Функция reload() импортирует ранее импортированный модуль снова. Синтаксис функции reload() следующий:

 

Здесь module_name это имя модуля, который вы хотите перезагрузить, а не строка, содержащая имя модуля. Например, чтобы перезагрузить модуль hello, выполните следующие действия:

 

Пакеты в Python

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

Рассмотрим файл Pots.py доступный в каталоге phone. Этот файл имеет следующую строку исходного кода:

 

Похоже, у нас есть два других файла, имеющие различные функции с тем же именем, что и выше. Это:

  • файл phone/Isdn.py, имеющий функцию Isdn()
  • файл phone/G3.py, имеющий функцию G3()

Теперь создайте еще один файл __init__.py в каталог phone:

  • phone/__ init__.py

Для того, чтобы все ваши функции были доступны, когда вы импортировали phone, вам нужно будет поставить явные операторы импорта в __init__.py следующим образом:

 

После добавления этих строк в __init__.py, у вас будут все эти классы доступные при импорте пакета phone.

 

Когда этот код выполниться, он произведет следующий результат:

 

В приведенном выше примере, мы взяли пример из одной функции в каждом файле, но вы можете сохранить несколько функций в файлах. Вы также можете определить различные классы Python в этих файлах, а затем вы можете создавать свои пакеты из этих классов.

 

Читайте также

    Добавить комментарий

    Войти с помощью: 

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Простая логическая игра "Поймай кота". Задача игры окружить кота точками так, чтобы он не смог убежать с поля. Постигла неудача - начни игру снова!

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close