Успех — это успеть (М.И. Цветаева).

Python 3 – Модули

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

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

Пример

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

def print_func( par ):
   print "Hello : ", par
   return

 

Заявление import

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

import module1[, module2[,... moduleN]

 

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

#!/usr/bin/python3

# Поддержка импорта модуля
import support

# Теперь можно вызвать определенную функцию этого модуля следующим образом
support.print_func("AndreyEx")

 

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

Hello : AndreyEx

 

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

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

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

from modname import name1[, name2[, ... nameN]]

 

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

#!/usr/bin/python3

# Модуль числа Фибоначчи

def fib(n): # возврат серии Фибоначчи до n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
>>> from fib import fib
>>> fib(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

 

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

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

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

from modname import *

 

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

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

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

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

#!/usr/bin/python3

# Модуль числа Фибоначчи

def fib(n): # возврат серии Фибоначчи до n
   result = []
   a, b = 0, 1
   while b < n:
      result.append(b)
      a, b = b, a + b
   return result
if __name__ == "__main__":
   f = fib(100)
   print(f)

 

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

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

 

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

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

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

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

Переменная PYTHONPATH

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

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

set PYTHONPATH = c:\python34\lib;

 

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

set PYTHONPATH = /usr/local/lib/python

 

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

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

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

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

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

#!/usr/bin/python3

Money = 2000
def AddMoney():
   # Раскомментируйте следующую строку, чтобы исправить код:
   # global Money
   Money = Money + 1

print (Money)
AddMoney()
print (Money)

 

Функция dir()

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

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

#!/usr/bin/python3

# Импорт встроенного модуля math
import math

content = dir(math)

print (content)

 

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

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

 

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

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

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

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

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

Функция reload()

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

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

reload(module_name)

 

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

reload(hello)

 

Пакеты в Python

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

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

#!/usr/bin/python3

def Pots():
print ("У меня есть телефон")

 

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

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

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

  • phone/__ init__.py

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

from Pots import Pots
from Isdn import Isdn
from G3 import G3

 

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

#!/usr/bin/python3

# Теперь импортируйте пакет Phone.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

 

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

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

 

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

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 108

Если статья понравилась, то поделитесь ей в социальных сетях:

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

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

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

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

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам:

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

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

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

    close
    galka

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

    close