Поговорим о важной части программирования на питоне — о модулях
Модуль — это отдельный файл (расширение .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) # только потом выводим результат (без указания функции)
Результат:
Импорт модулей
Импорт своих созданных модулей ничем не отличается от встроенных. Как мы помним в разных модулях могут содержаться переменные и функции под одними и теми же названиями. Как это работает?
В корневом каталоге у нас есть файл 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)
Результат:
Модуль 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)
Результат
