Как вынести функции в отдельный файл python
Перейти к содержимому

Как вынести функции в отдельный файл python

  • автор:

Работа с модулями: создание, подключение инструкциями import и from

Python 3 логотип

Модулем в Python называется любой файл с программой (да-да, все те программы, которые вы писали, можно назвать модулями). В этой статье мы поговорим о том, как создать модуль, и как подключить модуль, из стандартной библиотеки или написанный вами.

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

Подключение модуля из стандартной библиотеки

Подключить модуль можно с помощью инструкции import. К примеру, подключим модуль os для получения текущей директории:

 import указывается название модуля. Одной инструкцией можно подключить несколько модулей, хотя этого не рекомендуется делать, так как это снижает читаемость кода. Импортируем модули time и random.
 
 

Использование псевдонимов

Если название модуля слишком длинное, или оно вам не нравится по каким-то другим причинам, то для него можно создать псевдоним, с помощью ключевого слова as.

 

Инструкция from

Подключить определенные атрибуты модуля можно с помощью инструкции from. Она имеет несколько форматов:

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

Следует заметить, что не все атрибуты будут импортированы. Если в модуле определена переменная __all__ (список атрибутов, которые могут быть подключены), то будут подключены только атрибуты из этого списка. Если переменная __all__ не определена, то будут подключены все атрибуты, не начинающиеся с нижнего подчёркивания. Кроме того, необходимо учитывать, что импортирование всех атрибутов из модуля может нарушить пространство имен главной программы, так как переменные, имеющие одинаковые имена, будут перезаписаны.

Создание своего модуля на Python

Теперь пришло время создать свой модуль. Создадим файл mymodule.py, в которой определим какие-нибудь функции:

Теперь в этой же папке создадим другой файл, например, main.py:
Выведет:
Поздравляю! Вы сделали свой модуль! Напоследок отвечу ещё на пару вопросов, связанных с созданием модулей:

Как назвать модуль?

Помните, что вы (или другие люди) будут его импортировать и использовать в качестве переменной. Модуль нельзя именовать также, как и ключевое слово (их список можно посмотреть тут). Также имена модулей нельзя начинать с цифры. И не стоит называть модуль также, как какую-либо из встроенных функций. То есть, конечно, можно, но это создаст большие неудобства при его последующем использовании.

Куда поместить модуль?

Туда, где его потом можно будет найти. Пути поиска модулей указаны в переменной sys.path. В него включены текущая директория (то есть модуль можно оставить в папке с основной программой), а также директории, в которых установлен python. Кроме того, переменную sys.path можно изменять вручную, что позволяет положить модуль в любое удобное для вас место (главное, не забыть в главной программе модифицировать sys.path).

Можно ли использовать модуль как самостоятельную программу?

Можно. Однако надо помнить, что при импортировании модуля его код выполняется полностью, то есть, если программа что-то печатает, то при её импортировании это будет напечатано. Этого можно избежать, если проверять, запущен ли скрипт как программа, или импортирован. Это можно сделать с помощью переменной __name__, которая определена в любой программе, и равна "__main__", если скрипт запущен в качестве главной программы, и имя, если он импортирован. Например, mymodule.py может выглядеть вот так:

Для вставки кода на Python в комментарий заключайте его в теги

Вынести Текстовые переменные в единый файл - Python - Ответ 16442301

Author24 — интернет-сервис помощи студентам

Подскажите пожалуйста, посоветуйте, можно ли такое сделать, если да, то как?!
Постараюсь понятно пояснить суть.

Вобщем есть код, в коде присутствуют текстовые переменные:

. ="Ксерокс"
. = "Принтер"
. = "Кондиционер"
. = "Стол"
. = "Стул"
.

Возможно ли, вынести все эти текстовые значения, в единый Текстовый файл. Пусть даже этот файл будет без форматирования, просто списком. НО! В каждом месте кода, где было текстовое значение, установить какую нибудь !метку! или индекс файла(порядковый номер), или может массив создать в коде. Что бы когда код будет выполняться, он глядя на эту метку, вычитывал из Текстового файла именно необходимую строку.

Вобщем суть такова, что бы все текстовые значения вынести в отдельный файл, текстовый.

Меню пользователя @ Memfivosfey

Импорт функций из другого файла pytnon

Допустим есть два файла Main и DrawW . Я хочу обратиться к функции из файла DrawW . И все бы ничего, если бы не понадобилось сделать наоборот. Я говорю о том, что если я пропишу следующий код: В Main :

from DrawW import * 

В DrawW (потому что надо обратиться к переменным из Main ) :

from main import * 

то вылетает ошибка:

NameError: name 'Function' is not defined.

  • есть переменная Lose , указывающая на то, не проиграл ли игрок.
  • есть функция Draw (которую я хотел бы вынести в отдельный файл). В данной функции работает цикл if .
if not Lose : #в теле указано то, какие .png файлы нужно отрисовывать 

Загвоздка заключается в том, что Lose зависит от других переменных, находящихся в файле Main. И как вы уже указали нельзя использовать 'кольцевой импорт'. Так вот что же посоветуете. Извините что не вставил фрагмент кода.

Можно ли функции вынести в отдельный файл?

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

  • Вопрос задан более двух лет назад
  • 137 просмотров

3 комментария

Простой 3 комментария

fox_12

Владимир Куц @fox_12 Куратор тега Python

А как по-вашему все внешние библиотеки Python работают?

Dream @dreameddd Автор вопроса

Владимир Куц, не, просто спросил, мб есть сложности думал.

fox_12

Владимир Куц @fox_12 Куратор тега Python

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

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

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