|
|
发表于 2018-4-30 22:40:36
|
显示全部楼层
本帖最后由 ABC23 于 2018-4-30 22:44 编辑
#a.py
import b
print('hello')
def x():
print('x')
if __name__ == '__main__':
b.y()
#b.py
import a
print('world')
def y():
print('y')
print('!')
if __name__ == '__main__':
print('1')
a.x()
运行结果:
world
!
hello
world
!
1
x
====================
一步一步看,应该不难理解。
因为运行的是模块b,所以我们以b为主考虑。
1. 先看全局的语句,打印world和!;
2. 在看函数,函数是Python的一等公民。它不直接加载,而是等到运行时加载;等着。
3. 看if __name__ == '__main__'这一行,这行语句表示【当该模块作为主模块运行时加载以下语句】,这里就是b模块;
4. 因为我们在b的头部import了模块a,在执行玩b的全局语句后执行a的全局语句,打印hello;
5. 要导入的模块(依赖的模块)之前已经加载完毕,接着会运行if __name__ == '__main__'下面的语句,打印1、x
6. 回头看3,b模块的函数自始至终没有被执行,那就不管她
要注意的是,import语句表示【必要时进行导入】,如果已经导入多了就不必重复导入。这应该是你理解的困境(我猜)。 |
|