2017-01-03 5 views
2

В рамках проекта, над которым я работаю в школе, у меня есть основной файл (SM.py) и папка под названием «mods», в которой вы может поместить другие .py-файлы, которые импортируются в мою программу и добавлять к ним материал (я не хочу начинать объяснять, что я на самом деле делаю, так как это займет много времени, но если это актуально, я могу это объяснить).Python - вызов функции, которая находится в родительском файле из импортированного файла

Что я хочу сделать, это запустить таймер внутри одного из моих файлов mod, который вызывает функцию call_trigger (триггер) из основного файла (SM.py). Проблема в том, что я не могу импортировать основной файл в файл mod, так как это создаст циклическую зависимость. Так что я в основном пытаюсь сделать это:

a.py импортирует b.py, a.py имеет функцию foo(). Я хочу вызвать foo() из b.py, не сначала импортируя a.py.

Надеется, я объяснил себя хорошо, если вам нужны дополнительные объяснения, я могу предоставить его :)

ответ

0

Вы можете использовать функцию обратный вызов для достижения этой цели:

# Some code from your top level 
def foo(): 
    print("Foobar") 

def bar(param): 
    print("param=%s" % param) 

# Code in the module 
def baz(callback): 
    print("Do something") 
    callback() 

baz(foo) # notice that there are no() after foo 
baz(lambda: bar(23)) # lambda creates an anonymous function, 
        # which is called by baz. The call within 
        # baz is the point when bar(23) will be executed. 

Вы можете передать любой вызываемый объект в качестве параметра к функции python и позже может вызвать этот параметр.