Connect with us

Обучение

Python #7: Модули, пакеты

340

 

Поговорим о важной части программирования на питоне — о модулях

Модуль — это отдельный файл (расширение .py) с конкретным кодом (классы, функции, данные и т.д.), который мы можем вызвать в любом другом месте.

Т.е. мы можем импортировать кучу файлов перед кодом, чтобы не писать их код заново. Делается это, чтобы разделить огромный проект на мелкие и не загромождать кодом каждый файл в программе. Можно использовать как библиотеки, встроенные в питон (math — для математических функций, random — чтобы генерировать случайное число), так и собственноручно написанные. Для вставки модуля используется команда import.

import random 

Если модуль лежит в какой-либо директории, указываем путь через точку

folder.mymodule

Можно использовать только конкретные функции отдельного модуля. Записывается так:

from math import sin,cos

Либо импортировать все функции (и всё содержимое) — этот способ не рекомендуется

from math import* 

[adace-ad id=»3474″]

 

Основные функции random

Библиотека random достаточно часто используется во всевозможных задачах, поэтому его основные функции лучше знать и помнить

randint — целое случайное число от x до n

choise — выбирает случайный элемент последовательности

shuffle — перемешивает последовательность

sample — список длиной x из последовательности

Рассмотрим на примере:

[code]

from random import randint, choice, shuffle, sample # из библиотеки рандом импортируем нужные нам функции

# получить случайное число от 1 до 10
print(randint (0,10)) # выводим на экран числа, в скобочках randint указываем диапазон

# выбрать случайный элемент из последовательности
buhlo = [‘Вискарь’, ‘Водка’, ‘Пиво’, ‘Вино’] print(choice(buhlo))

# выбрать три случайных спиртных напитка из списка выше
print(sample(buhlo, 3)) # не забываем указать функции сколько элементов нужно взять из последовательности

# перемешать карты в стопке

cards = [‘Туз’, ‘Валет’, ‘Дама’, ‘Король’] shuffle (cards) # сначала перемешиваем последовательность
print(cards) # только потом выводим результат (без указания функции)

[/code]

 

Результат:

[adace-ad id=»3475″]

 

Импорт модулей

Импорт своих созданных модулей ничем не отличается от встроенных. Как мы помним в разных модулях могут содержаться переменные и функции под одними и теми же названиями. Как это работает?

В корневом каталоге у нас есть файл main.py. В него и будем импортировать. Создаем каталог Viski, там создаем файл Spiced. В корневом каталоге создадим так же файл бухлишко

Сделаем так, чтобы в файлах Spiced и Buhlishko были одинаковые переменные (viski) и одинаковые функции (sales). Вот так:

Теперь будем импортировать модули в main из обоих файлов:

Результат:

Импорт модулей со скриптами

Если мы будем импортировать модуль с каким-то готовым скриптом, то его код будет выполняться. До этого мы импортировали модули, которые просто содержали какие-то данные. Что будет, если в импортируемом модуле уже есть какой-то код?

[adace-ad id=»3482″]

 

Создадим отдельный файл checkout, куда запишем код вывода в консоль каких-нибудь фраз

Если мы его импортируем, то получим выполнение кода в самом начале работы программы:

Даже если вы используете инструкцию from (для импорта, например, только переменной) — код print будет выполняться всё равно.

Как сделать, так, чтобы он не выполнялся?

Ограничение выполнения скриптов делается через конструкцию

if __name__== ‘__main__’:

Её достаточно вписать в наш файл chekout. Код будет выполняться только в самом модуле (внутри самого chekout), но не будет выполняться там, куда мы его импортировали (main)

Код:

Результат:

Но теперь, благодаря нашей конструкции код в файле main выполняться не будет, даже если мы импортируем checkout

Пакеты

Пакеты — это директории с файлом или несколькими файлами программы (с расширением .py). Он так же может содержать внутри другие пакеты (дерево) и обязательно содержим файл __init__.py (он пустой). Уровни вложенности пакетов разделяются точкой:

package1.package2.module

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

import .module (через точку)

Можно так же импортировать какие-то классы, объекты и т.д. через команду from.

Рассмотрим наш алкомаркет с несколькими пакетами. Основой программы будет файл main. Он будет располагаться в корневом каталоге. Создадим пакет «Пиво», в ней создадим еще один пакет «Белое» и в него уже добавим два модуля (два файла .py) — hoegaarden.py и paulaner.py. В папке Beer создадим еще один пакет — назовем его russian. В него добавим модуль baltika. Общая структура будет выглядеть так:

В пределах одного пакета записываем импорт через точку:

Если в каталоге beer мы создадим модуль магнат, тот вызов модуля из пакета white будет произведен через точку:

А в файле main, который у нас вообще в корне, запишем импорт модуля main. И запустим программу:

Результат:

Модули os и sys

Модуль os предназначен для работы с операционной системой. При этом он работает вне зависимости от того, линукс у вас или винда — разницы для питона нет.  Рассмотрим его основные функции и переменные

os.name — в переменной хранится название ОС

os.chdir — смена текущей директории

os.getcwd() — возвращает текущую рабочую директорию

os.mkdir() — создание папки (директории, каталога)

os.path — модуль для работы с путями

Рассмотрим это в pycharm’е

[code]

import os #импортируем модуль os для дальнейшей работы

#имя нашей операционки
print(os.name)

#показывает текущую рабочую директорию (путь до неё)
print(os.getcwd())

#создаем новый путь с помощью функции os.path.join
# передаем её два параметра — os.getcwd() — текущий каталог и название папки
new_folder = os.path.join(os.getcwd(), ‘my_folder’)

# и создадим внутри новый каталог
os.mkdir(new_folder)

[/code]

 

Результат:

Модуль sys предназначен для работы с интерпритатором языка питон. С помощью его переменных мы сможем подключать свои модули вне нашего каталога с программой. Функции и переменные модуля sys

 executable — путь к интерпритатору питона

exit()- выход из питона

platform — информация об операционной системе

path — список путей поиска модулей

argv- список аргументов командной строки

Проверим, как работают отдельные переменные и функции

[code]

import sys

#путь до интерпритатора
print(sys.executable)

#информация о платформе
print(sys.platform)

#выход из питона
sys.exit()

print(‘этот код уже не выполнится. Вообще. Совсем.’)

[/code]

 

Результат:

sys.path

Переменная sys.path имеет тип данных list (список), а значит мы можем её изменять. Это нужно для того, чтобы указать интерпритатору где еще можно искать модули для нашей программы

[code]

import sys

print (type(sys.path)) # проверяем тип переменной — это list

print(sys.path) # печатаем список путей, которые сейчас парсит питон на предмет модулей

sys.path.append(‘D:’) #с помощью команды append (т.к. у нас список) добавить новый путь

[/code]

 

Создание каталогов

Давайте попробуем создать пять папок в каталоге с нашим модулем с названием нашей платформы (в нашем случае это win32) и его порядковым номером

[code]

import sys, os

operation_system = sys.platform #в переменную operation_system записываем названием платформы, на которой мы работаем

# с помощью цикла создадим 5 папок

for i in range (1, 6): #встроенная функция range создает список, длинной от 1 до 6 (не включительно), т.е. до 5
# в перменной будем хранить путь, где будут создаваться папки. Первая часть
# это путь до нашего модуля. os.path.join создает новый путь
# вторая часть состоит из названия платформы + i (это текущий счетчик)
path_folder = os.path.join(os.getcwd(),'{}_{}’.format(operation_system, i))
os.mkdir(path_folder)

[/code]

 

Результат

Нажмите что бы оставить комментарий

Ответить

Ваш адрес email не будет опубликован.

Лучшие сервисы стриминга музыки в 2019 году

Сервисы

Телевидение Wink Ростелеком: Samsung LG, Sony, Phillips, Android TV

Ростелеком

Ноутбуки Asus не видят жесткий диск. Автоматический вход в BIOS при старте

Гаджеты

LG WEB OS: приложения, обновления, настройка, проблемы со звуком

Гаджеты

Advertisement Яндекс.Метрика

Digital2.ru - Тренды, Профессии IT, WEB- разработка, Вакансии, Автоматизация, Цифровая экономика
Свободное копирование и распространение материалов с сайта Digital2.ru
разрешено только с указанием активной ссылки на Digital2 как на источник.
Copyright 2018 - 2020 © All rights reserved

OPGIO.COM

Connect