Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2019 11:16:51

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

у меня есть 10 подгружаемых / импортируемых файлов
они называются например
file_01.py
file_02.py

file_10.py

внутри каждого файла есть функция с одинаковым названием “start_parce()”
например,

 def start_parce(z):
    print("что-нибудь специфическое, например Z = ", z)

Как мне в цикле главной программы пройтись по всем 10 файлам?

 # это главная программа
list_files = ["file_01","file_02",... "file_10"]
for i in list_files:
    [x, y] = file_XXX.start_parce(z)

что мне вместо file_XXX писать?
Спасибо

Отредактировано gtlhbkkj (Окт. 14, 2019 12:28:45)

Офлайн

#2 Окт. 14, 2019 12:58:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

gtlhbkkj
Я бы сделал что-то наподобие Service Locator, благо в питоне такие трюки делаются как два пальца

   
_register = []
  
  
def service(func):
    _register.append(func)
    return func
  
  
def get_all():
    return _register
  
@service
def func1():
    print("func1")
  
@service
def func2():
    print("func2")
  
  
for func in get_all():
    func()



Офлайн

#3 Окт. 14, 2019 13:06:44

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

Решил свою задачу следующим образом. Посмотрите пож-ста это хорошо? Во-всяком случае работает.

 def f1(x):
    print("квадрат х = ", x**2)
def f2(x):
    print("печатаем х+100 = ", x + 100)
def f3(x):
    print("печатаем х+999 = ", x + 999)
list_functions = {"f1":f1, "f2":f2, "f3":f3}
list_keys = list(list_functions.keys())
list_keys.sort()
for i in list_keys:
    x = list_functions[i](5)
    print(x)
    input()

Офлайн

#4 Окт. 14, 2019 15:43:16

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

Тебе надо 10 файлов динамически проимпортировать или 10 функций вызвать?

> Посмотрите пож-ста это хорошо? Во-всяком случае работает.

Ну тогда лучше как то так…

 list_functions = [("f1",f1), ("f2",f2), ("f3",f3)]
print([ x(5) for x in list_functions ])



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

Отредактировано Rodegast (Окт. 14, 2019 15:44:38)

Офлайн

#5 Окт. 14, 2019 16:47:04

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

Rodegast
Тебе надо 10 файлов динамически проимпортировать или 10 функций вызвать?

Есть основная программа и примерно 10 файлов с функциями.
В каждом из 10 файлов по три взаимовызывающие функции
Функции одноименные, то есть в каждом файле они называются, например f1(), f2(), f3().
Код в этих трех функциях в каждом файле разный, поэтому я не хотел бы вместо 10 файлов с 3 одноименными функциями в каждом сделать один файл с 30 разноименными функциями, чтобы не запутаться.
В цикле главной программы мне нужно взять значение переменной из другого списка, пройтись по указанным 10 файлам и так много раз.
Как организовать оптимальную работу программы?
Я пока поступаю по простому – в начале главной программы импортирую все 10 файлов и тупо обращаюсь к функциям каждой из них file_01.f1(), file_01.f2() и так далее.
Насколько это правильно или как оптимизировать?
Спасибо

Отредактировано gtlhbkkj (Окт. 14, 2019 17:11:55)

Офлайн

#6 Окт. 14, 2019 22:38:49

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

Rodegast
Ну тогда лучше как то так…

  list_functions = [("f1",f1), ("f2",f2), ("f3",f3)]
print([ x(5) for x in list_functions ])


проверь пожста свой код. У меня ошибка выходит

 def f1(x):
    print("квадрат х = ", x**2)
def f2(x):
    print("печатаем х+100 = ", x + 100)
def f3(x):
    print("печатаем х+999 = ", x + 999)
list_functions = [("f1",f1), ("f2",f2), ("f3",f3)]
for x in list_functions:
    print([x(5)])

 Traceback (most recent call last):
  File "E:\Python\Learning\test1.py", line 10, in <module>
    print([x(5)])
TypeError: 'tuple' object is not callable

Офлайн

#7 Окт. 14, 2019 22:59:39

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

gtlhbkkj
проверь пожста свой код. У меня ошибка выходит
наверно имелось ввиду чтото типа такого:
 ...
list_functions = (f1, f2, f3)
for x in list_functions:
    print(x(5))



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Окт. 14, 2019 22:59:50)

Офлайн

#8 Окт. 14, 2019 23:40:32

gtlhbkkj
Зарегистрирован: 2019-09-20
Сообщения: 173
Репутация: +  2  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

PEHDOM
наверно имелось ввиду чтото типа такого:

  ...
list_functions = (f1, f2, f3)
for x in list_functions:
    print(x(5))
этот код у меня также дает ошибку.
попробуйте пожста дать работающий код, если это возможно короче чем через словари как я сделал.
спасибо

Отредактировано gtlhbkkj (Окт. 14, 2019 23:41:02)

Офлайн

#9 Окт. 15, 2019 06:58:04

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

gtlhbkkj
Посмотрите пож-ста это хорошо?
Плохо. Есть лишние действия сортировка, создание словаря и т.п.
 from importlib import import_module
li=["a","b","c"]
module_list=[import_module(i) for i in li]
for i in module_list:
    i.f()



Отредактировано doza_and (Окт. 15, 2019 07:03:40)

Офлайн

#10 Окт. 15, 2019 11:01:16

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Помогите как правильно вызвать функцию из другого файла?

> наверно имелось ввиду чтото типа такого:

Да, так и есть.

> этот код у меня также дает ошибку.

Ну я даже не знаю что там может не работать.

 >>> def f1(a): return a+1
...
>>> def f2(a): return a+2
...
>>> def f3(a): return a+3
...
>>> lst = [f1, f2, f3]
>>> [ x(5) for x in lst ]
[6, 7, 8]



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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version