Найти - Пользователи
Полная версия: Помогите как правильно вызвать функцию из другого файла?
Начало » Python для новичков » Помогите как правильно вызвать функцию из другого файла?
1 2
gtlhbkkj
у меня есть 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 писать?
Спасибо
FishHook
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()
gtlhbkkj
Решил свою задачу следующим образом. Посмотрите пож-ста это хорошо? Во-всяком случае работает.

 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()
Rodegast
Тебе надо 10 файлов динамически проимпортировать или 10 функций вызвать?

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

Ну тогда лучше как то так…
 list_functions = [("f1",f1), ("f2",f2), ("f3",f3)]
print([ x(5) for x in list_functions ])
gtlhbkkj
Rodegast
Тебе надо 10 файлов динамически проимпортировать или 10 функций вызвать?

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

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

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

doza_and
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()
Rodegast
> наверно имелось ввиду чтото типа такого:

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

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

Ну я даже не знаю что там может не работать.
 >>> 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]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB