Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/75: Рейтинг темы: голосов - 75, средняя оценка - 4.52
3 / 3 / 0
Регистрация: 05.02.2017
Сообщений: 218

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

19.02.2020, 14:18. Показов 15856. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два файла .py
В одном основная программа для старта окна, из другого хочу взять функцию

в основной импортирую таким образом:
Python
1
from funcED import poisk
в другом файле( funcED) хранится функция poisk , но в самом файле я импортирую данные из основного start.py вот так:
Python
1
2
3
4
5
6
7
8
9
10
from start import MainWindow, ui, conn, cursor
 
my_string1 = ui.lineEdit_1.text()
my_string2 = ui.lineEdit_2.text()
my_string3 = ui.lineEdit_3.text()
 
def poisk():
    if my_string1!="":
        print("кек")
    return 0

Python
1
2
3
4
5
6
7
8
9
10
выводятся ошибки:
 
Traceback (most recent call last):
  File "D:/Kyrs/start.py", line 5, in <module>
    from funcED import poisk
  File "D:\Kyrs\funcED.py", line 6, in <module>
    from start import MainWindow, ui, conn, cursor
  File "D:\Kyrs\start.py", line 5, in <module>
    from funcED import poisk
ImportError: cannot import name 'poisk' from 'funcED' (D:\Kyrs\funcED.py)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2020, 14:18
Ответы с готовыми решениями:

Импорт функций из другого файла
Всем привет. Может кто-нибудь сможет помочь с такой проблемой. Есть два файла: func.py и ui_func.py Мне нужно импортировать func.py в...

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

Импорт данных из другого файла
Есть вот такое: &lt;div class=&quot;example&quot;&gt; &lt;ul class=&quot;playlist&quot;&gt; &lt;/ul&gt; Как можно в ul playlist получать...

21
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
19.02.2020, 14:24
а import * не пробовали?
0
3 / 3 / 0
Регистрация: 05.02.2017
Сообщений: 218
19.02.2020, 14:26  [ТС]
Цитата Сообщение от codcw Посмотреть сообщение
а import * не пробовали?
SyntaxError: invalid syntax
0
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
19.02.2020, 14:30
а можно полный код обоих файлов?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.02.2020, 14:37
Циклический импорт. Не делай так. Это геморрой.
Файлы не должны зависеть друг от друга. Зависимость должна быть односторонняя.
1
3 / 3 / 0
Регистрация: 05.02.2017
Сообщений: 218
20.02.2020, 11:24  [ТС]
Цитата Сообщение от codcw Посмотреть сообщение
а можно полный код обоих файлов?
Файл в котором вызываю функцию:
Python
1
2
from funcED import  poisk
ui.pushButton_3.clicked.connect(poisk)
- этого достаточно
и файл в котором хранится эта функция
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QWidget, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import QSize, Qt
import sys
from ui import  Ui_MainWindow
from start import MainWindow, ui, conn, cursor
 
my_string1 = ui.lineEdit_1.text()
my_string2 = ui.lineEdit_2.text()
my_string3 = ui.lineEdit_3.text()
 
def poisk():
    if my_string1!="":
        print("кек")
    return 0
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
20.02.2020, 19:22
Цитата Сообщение от KAPATEJlb Посмотреть сообщение
Файл в котором вызываю функцию
сдается мне что не вызываете.
Python
1
ui.pushButton_3.clicked.connect(poisk())
0
3 / 3 / 0
Регистрация: 05.02.2017
Сообщений: 218
21.02.2020, 10:37  [ТС]
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
сдается мне что не вызываете
сдается мне, что мне хотят помочь такие же как и я ,только начавшие изучение python люди(

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

Python
1
2
3
4
ui.pushButton_1.clicked.connect(button1)
ui.pushButton_2.clicked.connect(button2)
ui.pushButton_3.clicked.connect(poisk)
ui.tableWidget.cellClicked.connect(clicked)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.02.2020, 12:22
KAPATEJlb, Для начала научитесь правильной терминологии, что бы было понятно о чем Вы говорите. Файл с программой которую вы изначально запускаете Лутц называет "сценарием", а все другие программные файлы называются модулями. Сам Python файлу, который вы запускаете автоматически присваивает имя '__main__'. Поэтому что бы Вас понять, называйте файл который вы запускаете Сценарий "Имя" или Основной (как Вы и назвали), но с указанием "Имени" файла. При импорте указывайте откуда загружаете Основной "имя" или если из модуля, то Модуль "Имя", дальше что он импортирует Модуль "Имя".
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
21.02.2020, 12:28
Зачем такой круговорот делать? Если вы хотите использовать параметры в функции, так и напишите какие аргументы надо передать в нее, а не импортируйте их
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.02.2020, 12:31
Цитата Сообщение от codcw Посмотреть сообщение
import *
Надеюсь Вы имели ввиду синтаксис, from ... import * , но учитывая, что ТС начинающий, нужно давать полный синтаксис, а не фрагменты из него.
KAPATEJlb, Так как я не понял какая у Вас взаимосвязь файлов, то не могу сказать правильная ли она, но если у Вас действительно существует зацикленность файлов, то это одна из причин возникновения ошибки.
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
21.02.2020, 12:33
Python
1
2
from funcED import  poisk
ui.pushButton_3.clicked.connect(poisk(ui.lineEdit_1.text()))



Python
1
2
3
4
def poisk(my_string):
    if my_string1!="":
        print("кек")
    return 0
Добавлено через 1 минуту
А это удалить
Python
1
from start import MainWindow, ui, conn, cursor
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.02.2020, 13:25
KAPATEJlb, Еще, что бы было понятнее что, куда импортируется, первой строкой в качестве комментария указывайте имя файла, в котором размещается код написанный ниже.То есть в файле funcED.py первой строчкой должна быть
# файл funcED.py
То, что я Вам рекомендую, не обязательно, но облегчает понимания Вашего кода другими, но и Вами тоже, когда вы вернетесь к нему через продолжительный промежуток времени и уже забудете его содержание.

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

Добавлено через 27 минут
KAPATEJlb, Когда Вы запускаете сценарий, то в оперативной памяти создается пространство имен (имен переменных, которые создаются в данном сценарии и доступны в этом сценарии как для чтения, так и для записи).
Когда при импорте Вы используете синтаксис from "Имя модуля" import "Имя переменной", ... то из модуля копируются указанные имена переменных, которые на самом деле являются ссылками на любые объекты питона, включая и функции. Все копируемые имена помещаются в пространство имен основного сценария (точнее того файла, куда происходит импортирование). Именно по этой причине нужно следить, что бы не было одинаковых имен в том файле откуда импортируется с тем куда импортируется. Но после такого импорта, Вы получаете единое пространство имен, объединяющее объекты из обоих файлов. Поэтому функция poisk уже будет находится в пространстве имен основного файла start и поэтому не нужно импортировать данные из файла start в файл funcED , что бы использовать в этой функции ( она уже находится в расширенном пространстве имен для файла start ).
Поэтому импортирование данных из файла start в файл funcED
Python
1
from start import MainWindow, ui, conn, cursor
является ошибкой.
Получилось громоздко, не знаю поняли ли Вы. Что не понятно, спрашивайте.
1
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
21.02.2020, 14:50
Viktorrus, само собой, я думал это очевидно
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.02.2020, 16:31
KAPATEJlb, По другому обстоит дело, если бы для импорта использовался синтаксис import "имя файла". В этом случае создается пространство имен импортируемого модуля, которое не пересекается с пространством имен основного модуля. Вот в этом случае может понадобиться передача данных из пространства имен основного файла в пространство имен импортируемого модуля. Но делается это не импортом основного файла, а с помощью аргументов функции или с помощью инструкции присваивания в основном модуле, которая присваивает значение из основного файла, переменной в пространстве имен модуля.
"имя модуля.переменная модуля = объект основного файла".
Но так как у Вас такой синтаксис импорта не используется, то углубляться в его объяснение не буду.
0
3 / 3 / 0
Регистрация: 05.02.2017
Сообщений: 218
22.02.2020, 11:20  [ТС]
я все прочитал, действительно интересно, и вроде что-то для себя понял.
Цитата Сообщение от Viktorrus Посмотреть сообщение
является ошибкой.
Получилось громоздко, не знаю поняли ли Вы. Что не понятно, спрашивайте.

Пример: в файле start.py содержится переменна
Цитата Сообщение от volkomorov Посмотреть сообщение
from funcED import  poisk
ui.pushButton_3.clicked.connect(poisk(ui .lineEdit_1.text()))
выдает ошибку
Python
1
2
 ui.pushButton_3.clicked.connect(poisk(my_string1))
TypeError: argument 1 has unexpected type 'int'
п.с my_string1 = ui.lineEdit_1.text() , если напрямую ui.lineedit_1.text() использовать то будет тоже самое
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
22.02.2020, 12:45
Смотрите какой тип данных передаете
0
3 / 3 / 0
Регистрация: 05.02.2017
Сообщений: 218
22.02.2020, 13:29  [ТС]
Цитата Сообщение от volkomorov Посмотреть сообщение
Смотрите какой тип данных передаете
стринг же, как исправить?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.02.2020, 13:39
Цитата Сообщение от KAPATEJlb Посмотреть сообщение
стринг же
Ну не тупи.

Цитата Сообщение от volkomorov Посмотреть сообщение
def poisk(my_string):
    if my_string1!="":
        print("кек")
    return 0
return 0

Добавлено через 2 минуты
Методу .connect нужно передавать функцию, а не ее результат.
0
3 / 3 / 0
Регистрация: 05.02.2017
Сообщений: 218
23.02.2020, 11:28  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
return 0
Цитата Сообщение от Garry Galler Посмотреть сообщение
Ну не тупи.
убрал return. Теперь TypeError: argument 1 has unexpected type 'NoneType'

я ж спрашиваю не от чего оно не работает,а что нужно чтобы заработало. А то как учителя в школе, "здесь неправильно, а как правильно я тебе не скажу"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2020, 11:28
Помогаю со студенческими работами здесь

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

Js функции из другого js файла
есть html-код, который подгружает functions.js &lt;!DOCTYPE html&gt; &lt;title&gt;Title of the document&lt;/title&gt; &lt;script type='text/javascript'...

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

Подключение функции из другого файла
Есть три файла: main.cpp, view.cpp, view.hpp. #include &quot;view.hpp&quot; int main() { draw();

Выполнение функции из другого файла
Меня интересует выполнение функции из другого файла. Не шарю за cmd от слова совсем. Допустим: Есть два cmd файла, 1.cmd и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru