you need to think about how this is getting interpreted, so add a few print statements:
tst1.py:
import tst2
tmp = None
print(f'tst1.py -- 1')
def main():
print(tmp)
met1()
print(tmp)
print(f'tst1.py -- 2')
def met1():
tst2.met2()
print(f'tst1.py -- 3')
def met3():
tmp = 5
print(f'tst1.py -- 4')
if __name__ == "__main__":
main()
tst2.py:
import tst1
global tmp
print(f'tst2.py -- 1')
def met2():
tst1.met3()
print(f'tst2.py -- 2')
output:
Output:
tst1.py -- 1
tst1.py -- 2
tst1.py -- 3
tst1.py -- 4
tst2.py -- 1
tst2.py -- 2
tst1.py -- 1
tst1.py -- 2
tst1.py -- 3
tst1.py -- 4
None
None
Notice that tst1.py is loaded twice.
Now if you attempt to print tmp in each one of the print statements just added, program will fail as soon as it tries to import tst2.py because tmp doesn't exist yet!
tst1:
import tst2
tmp = None
print(f'tst1.py -- 1, tmp: {tmp}')
def main():
print(tmp)
met1()
print(tmp)
print(f'tst1.py -- 2, tmp: {tmp}')
def met1():
tst2.met2()
print(f'tst1.py -- 3, tmp: {tmp}')
def met3():
tmp = 5
print(f'tst1.py -- 4, tmp: {tmp}')
if __name__ == "__main__":
main()
tst2.py:
import tst1
global tmp
print(f'tst2.py -- 1, tmp: {tmp}')
def met2():
tst1.met3()
print(f'tst2.py -- 2, tmp: {tmp}')
output:
Output:
tst1.py -- 1, tmp: None
tst1.py -- 2, tmp: None
tst1.py -- 3, tmp: None
tst1.py -- 4, tmp: None
Error:
Traceback (most recent call last):
File ".../src/tst1.py", line 1, in <module>
import tst2
File ".../src/tst2.py", line 4, in <module>
print(f'tst2.py -- 1, tmp: {tmp}')
NameError: name 'tmp' is not defined
Bottom line totally avoid globals. This can be done by passing tmp as an argument and returning modifications of tmp
tst1.py:
import tst2
print(f'tst1.py -- 1')
def main():
tmp = None
print(tmp)
tmp = met1(tmp)
print(tmp)
print(f'tst1.py -- 2')
def met1(tmp):
return tst2.met2(tmp)
print(f'tst1.py -- 3')
def met3(tmp):
tmp = 5
return tmp
print(f'tst1.py -- 4')
if __name__ == "__main__":
main()
tst2.py:
import tst1
print(f'tst2.py -- 1')
def met2(tmp):
return tst1.met3(tmp)
print(f'tst2.py -- 2')
output:
Output:
tst1.py -- 1
tst1.py -- 2
tst1.py -- 3
tst1.py -- 4
tst2.py -- 1
tst2.py -- 2
tst1.py -- 1
tst1.py -- 2
tst1.py -- 3
tst1.py -- 4
None
5