Как вызвать функцию из другого файла python

Обновлено: 06.07.2024

Питон включает в себя обширную библиотеку модулей, в которых реализовано множество полезных функций. Далее в этом курсе мы будем применять и другие полезные модули: re для регулярных выражений, collections , содержащий множество удобных структур данных, os и shutil для управления файлами и папками.

Для использования модуля его нужно импортировать — попросить питон загрузить его и сделать его функции доступными для использования. Импорт осуществляется с помощью оператора import . Например, модуль random используется для генерации “случайных” чисел.

Ещё один пример: модуль math , содержащий различные математические функции и константы

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

Если название модуля слишком длинное и вы не хотите его писать каждый раз, когда используете какую-то функцию, вы можете импортировать этот модуль под псевдонимом с помощью as:

Импорт нескольких модулей

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

Инструкция from

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

Также можно импортировать из модуля всё. То есть все функции, переменные и классы. Тогда нам не нужно каждый раз писать название модуля.

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

Правило хорошего тона — импортировать модули вначале вашей программы, до любого другого кода и функций.

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

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

Давайте напишем скрипт с парой функций и импортируем эти функции в другую программу.

Создадим программу mymodule.py:

В ней мы прописали две математические функции: среднее и факториал. Предположим теперь мы хотим воспользоваться ими в какой-нибудь другой программе myscript.py. Тогда мы положим эти два файла в одну директорию, чтобы импорт работал. И в результате мы сможем ипмортировать эти функции в новую программу.

Файл myscript.py:

Кстати, найдите баг в этом коде:

Задача: составление анаграмм

В качестве примера использования функций и модуля стандартной библиотеки random рассмотрим задачу составления анаграмм. В качестве входного файла будем использовать любой текст, из которого мы выберем слова. Пусть текст находится в файле text.txt и имеет следующее содержание (из Яндекс.Рефератов):

Задача состоит в том, что необходимо составить файл формата TSV, состоящий из 4 колонок: слово из файла и три его случайных анаграммы. Для простоты анаграммы могут совпадать с самим словом или друг с другом. В итоге требуется получить файл table.tsv , который будет начинаться следующим образом:

Полный код для решения этой задачи может выглядеть следующим образом:

Пусть какая-то функция получает на вход список из 30 случайных целых чисел от 0 до 100, сгенерированных с помощью модуля random. В вариантах описана функция.

+1 балл для всех: ответьте коротко на вопрос “Почему модуль random на самом деле НЕ генерирует случайные числа?”

Функция берёт два случайных числа из этого списка (с помощью модуля random) и считает по ним количество всевозможных сочетаний этих чисел с точки зрения теории вероятности, С из n по k (использовать функцию из модуля math – factorial). Количество сочетаний (в формате float) печатается. k должно быть меньше n

Функция возвращает произведение значений списка. Нужно пользоваться модулем math. Руководствоваться надо тем, что exp(log(a) + log(b)) = a * b

Функция возвращает строку из 30 букв. Список, полученный на вход, задает порядок букв в строке по номеру буквы в алфавите.

Функция берёт из списка 4 случайных числа, условно принимает их за две точки в двумерном пространстве и возвращает евклидово расстояние между этими точками. Использовать модули random и math.

Функция перемешивает список с помощью random.shuffle(), сравнивает его с исходным списком и возвращает количество индексов, значение элемента по которым поменялось. Запустите функцию в цикле 100 раз и напечатайте в скольки процентов случаев меняются все элементы списка.

Функция возвращает среднее геометрическое списка. Вомпользуйтесь модулем math. Отдельно вне функции покажите, что ее результат лежит между минимальным и максимальным значениями списка для 20 случаев. (Для это нужно на каждой итерации генерировать подаваемый на вход список заново)

Функция возвращает среднее арифметическое элементов списка, округлённое вверх. Используйте модуль math.

Автор оригинала: Chris.

Самый питонический путь к Импортируйте модуль из другой папки Чтобы разместить пустой файл с именем __init__.py в эту папку и использовать Относительный путь с точечной обозначением Отказ Например, модуль в родительской папке будет импортирован с от .. Импорт модуль Отказ __init__.py Файловые сигналы в Python, что папка должна рассматриваться как упаковка .

Проблема : Как импортировать файл или модуль из другой папки или каталога в Python?

Пример : Скажем, вы дали следующую структуру папки:

Метод 1: sysspath.append ()

Первый метод добавляет путь file_1.py к переменной пути системы.

Обратите внимание, что вам нужно заменить первые три точки в '/. /Приложение/Приложение/Папка' с бетонным путем к Приложения папка.

Кстати, не стесняйтесь присоединиться к моей бесплатной академии электронной почты и Загрузите свои читы Python Cheat здесь:

Хорошо, давайте перейдем к слегка модифицированному решению этой проблемы:

Способ 2: sys.path.insert ()

Опять же, замените первые три точки в '/. /application/app/folder' с бетонным путем к Приложения папка.

Способ 3: точечная запись с __init__.py

Вы также можете сделать следующий трюк, создавая новый пакет.

Однако убедитесь, что включите пустой __init__.py файл в каталоге. Этот файл говорит Python для обработки каталога в качестве пакета. Это считается самым питонным способом решения этой проблемы.

Метод 4: ImportLib

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.


Импорт класса из другого файла
Кароче Мне необходимо прописать действие при нажатии кнопки. Интерфейс сделал в QtDesigner, файл.

Вызов функции с другого питон файла
Есть например 2 файла data.py и body.py . В первый я пишу функции, а в другой основной код, для.


Автоматический импорт данных из другого файла
Здравствуйте. Нужна помощь. На компьютере есть *.txt файл, название которого меняется каждый.

Js функции из другого js файла
есть html-код, который подгружает functions.js <!DOCTYPE html> <title>Title of the.

Циклический импорт. Не делай так. Это геморрой.
Файлы не должны зависеть друг от друга. Зависимость должна быть односторонняя. - этого достаточно
и файл в котором хранится эта функция

сдается мне, что мне хотят помочь такие же как и я ,только начавшие изучение python люди(

Не работает оно так, + остальные функции из основного файла нормально вызываются и без ()

KAPATEJlb, Для начала научитесь правильной терминологии, что бы было понятно о чем Вы говорите. Файл с программой которую вы изначально запускаете Лутц называет "сценарием", а все другие программные файлы называются модулями. Сам Python файлу, который вы запускаете автоматически присваивает имя '__main__'. Поэтому что бы Вас понять, называйте файл который вы запускаете Сценарий "Имя" или Основной (как Вы и назвали), но с указанием "Имени" файла. При импорте указывайте откуда загружаете Основной "имя" или если из модуля, то Модуль "Имя", дальше что он импортирует Модуль "Имя". Зачем такой круговорот делать? Если вы хотите использовать параметры в функции, так и напишите какие аргументы надо передать в нее, а не импортируйте их Надеюсь Вы имели ввиду синтаксис, from . import * , но учитывая, что ТС начинающий, нужно давать полный синтаксис, а не фрагменты из него.
KAPATEJlb, Так как я не понял какая у Вас взаимосвязь файлов, то не могу сказать правильная ли она, но если у Вас действительно существует зацикленность файлов, то это одна из причин возникновения ошибки.

Добавлено через 13 минут
KAPATEJlb, На конец я вроде понял, что Вы делаете.
Вы в Основной файл start импортируете функцию poisk из модуля funcED , и при этом в модуль funcED импортируете аргументы для функции из основного файла start.
Это показывает, что Вы не понимаете как работает импорт в Python.
Сейчас попытаюсь Вам объяснить.

Добавлено через 27 минут
KAPATEJlb, Когда Вы запускаете сценарий, то в оперативной памяти создается пространство имен (имен переменных, которые создаются в данном сценарии и доступны в этом сценарии как для чтения, так и для записи).
Когда при импорте Вы используете синтаксис from "Имя модуля" import "Имя переменной", . то из модуля копируются указанные имена переменных, которые на самом деле являются ссылками на любые объекты питона, включая и функции. Все копируемые имена помещаются в пространство имен основного сценария (точнее того файла, куда происходит импортирование). Именно по этой причине нужно следить, что бы не было одинаковых имен в том файле откуда импортируется с тем куда импортируется. Но после такого импорта, Вы получаете единое пространство имен, объединяющее объекты из обоих файлов. Поэтому функция poisk уже будет находится в пространстве имен основного файла start и поэтому не нужно импортировать данные из файла start в файл funcED , что бы использовать в этой функции ( она уже находится в расширенном пространстве имен для файла start ).
Поэтому импортирование данных из файла start в файл funcED

Set_up: у меня есть файл .py для каждой функции, которую мне нужно использовать в программе.

В этой программе мне нужно вызывать функцию из внешних файлов.

Но я получаю ошибку:

ImportError: Нет модуля с именем file.py; файл не является пакетом

Как мне решить эту проблему?

Нет необходимости добавлять file.py при импорте. Просто напишите from file import function , а затем вызовите функцию, используя function(a, b) . Причина, по которой это может не сработать, заключается в том, что file является одним из основных модулей Python, поэтому я предлагаю вам изменить имя вашего файла.

Обратите внимание, что если вы пытаетесь импортировать функции из a.py в файл с именем b.py , вам необходимо убедиться, что a.py и b.py находятся в одном каталоге.

Предположим, файл, который вы хотите вызвать, - anotherfile.py, а метод, который вы хотите вызвать, - method1, затем сначала импортируйте файл, а затем метод

Если method1 является частью класса, пусть класс будет class1, тогда

Затем создайте объект класса 1, предположим, что имя объекта - ob1, затем

Прежде всего, вам не нужен .py .

Если у вас есть файл a.py , а внутри у вас есть несколько функций:

И вы хотите импортировать их в z.py вы должны написать

Если ваш файл находится в другой структуре пакета, и вы хотите вызвать его из другого пакета, то вы можете вызвать его следующим образом:

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

Python package and file structure

В - com.my.func.DifferentFunction файле Python у вас есть какая-то функция, например:

И вы хотите вызывать различные функции из Example3.py , а затем сделать это следующим образом:

Определить оператор импорта в Example3.py - файле для импорта всех функций

Или определите имя каждой функции, которую вы хотите импортировать

Затем в Example3.py вы можете вызвать функцию для выполнения:

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

Альтернатива 1 Временно измените ваш рабочий каталог

Альтернатива 2 Добавьте каталог, в котором у вас есть функция, в sys.path.

Функции из файла .py (могут (конечно) находиться в другом каталоге) можно просто импортировать, сначала написав каталоги, а затем имя файла без расширения .py:

И позже будет использоваться: function_name()

Переименуйте модуль в нечто иное, чем «файл».

Также убедитесь, что при вызове функции:

1) если вы импортируете весь модуль, вы повторяете имя модуля при его вызове:

2) или если вы импортируете определенные функции, функции с псевдонимом или все функции, использующие *, вы не повторяете имя модуля:

Вы можете сделать это двумя способами. Во-первых, просто импортируйте нужную функцию из файла file.py. Для этого используйте

Другой способ - импортировать весь файл.

Затем вы можете вызвать любую функцию внутри file.py, используя

Вам не нужно добавлять file.py .

Просто храните файл в одном месте с файлом, из которого вы хотите его импортировать. Затем просто импортируйте ваши функции:

Наткнулся на ту же функцию, но мне пришлось сделать ниже, чтобы она заработала.

Если вы видите «ModuleNotFoundError: модуль не назван», вам, вероятно, нужна точка (.) Перед именем файла, как показано ниже;

Сначала сохраните файл в формате .py (например, my_example.py ). И если этот файл имеет функции,

В вызывающей функции вам просто нужно ввести следующие строки.

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

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