Three python modules, calling one another -
i working on project have 3 python modules (a.py, b.py , c.py).
module a calling module b, module b calling module c, , module c calling module a. behaviour bizzare when runs.
here 3 modules:
a.py
print('module a') def a() : print('inside a') return true import b b.b() b.py
print('module b') def b() : print('inside b') return true import c c.c() c.py
print('module c') def c() : print('inside c') return true import a.a() when run a.py, output observed :
module module b module c module inside b inside inside c inside b whereas expected behavior is:
module module b module c module inside b why happen? there alternative way such implementation?
this has stack frames , how functions , imports called.
you start running a.py.
'module a' first thing happens: import b:
'module b' within b, c.py imported:
'module c' module c imports a, , get:
'module a' b has been imported running a.py in first place, call of import b passed (we not re-import b.py). see effects of calling b.b(), next statement:
inside b and return c.py's frame, call a.a():
inside c.py has run course; next jump b.py, left off (right after importing), , call c.c():
inside c now b.py has finished running well. return a.py frame ran program, , call b.b():
inside b hope helps explain behavior. here's example of how rectify problem , desired output:
a.py:
print("module a") import b def main(): b.b() def a(): print("inside a") if __name__ == "__main__": main() b.py:
print("module b") import c def main(): c.c() def b(): print("inside b") if __name__ == "__main__": main() c.py:
print("module c") import def main(): a.a() def c(): print("inside c") if __name__ == "__main__": main() here's link explain happens if __name__ == "__main__": main() call. run main() function each script if script built & run in first place. in way, desired output:
module module b module c module inside b
Comments
Post a Comment