Форум сайта python.su
2
у меня есть 10 подгружаемых / импортируемых файлов
они называются например
file_01.py
file_02.py
…
file_10.py
внутри каждого файла есть функция с одинаковым названием “start_parce()”
например,
def start_parce(z): print("что-нибудь специфическое, например Z = ", z)
# это главная программа list_files = ["file_01","file_02",... "file_10"] for i in list_files: [x, y] = file_XXX.start_parce(z)
Отредактировано gtlhbkkj (Окт. 14, 2019 12:28:45)
Офлайн
568
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()
Офлайн
2
Решил свою задачу следующим образом. Посмотрите пож-ста это хорошо? Во-всяком случае работает.
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()
Офлайн
186
Тебе надо 10 файлов динамически проимпортировать или 10 функций вызвать?
> Посмотрите пож-ста это хорошо? Во-всяком случае работает.
Ну тогда лучше как то так…
list_functions = [("f1",f1), ("f2",f2), ("f3",f3)] print([ x(5) for x in list_functions ])
Отредактировано Rodegast (Окт. 14, 2019 15:44:38)
Офлайн
2
Rodegast
Тебе надо 10 файлов динамически проимпортировать или 10 функций вызвать?
Отредактировано gtlhbkkj (Окт. 14, 2019 17:11:55)
Офлайн
2
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
Офлайн
294
gtlhbkkjнаверно имелось ввиду чтото типа такого:
проверь пожста свой код. У меня ошибка выходит
... list_functions = (f1, f2, f3) for x in list_functions: print(x(5))
[code python][/code]
Отредактировано PEHDOM (Окт. 14, 2019 22:59:50)
Офлайн
2
PEHDOMэтот код у меня также дает ошибку.
наверно имелось ввиду чтото типа такого:... list_functions = (f1, f2, f3) for x in list_functions: print(x(5))
Отредактировано gtlhbkkj (Окт. 14, 2019 23:41:02)
Офлайн
253
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)
Офлайн
186
> наверно имелось ввиду чтото типа такого:
Да, так и есть.
> этот код у меня также дает ошибку.
Ну я даже не знаю что там может не работать.
>>> 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]
Офлайн