python中关于__name__ = '__main__' 的代码
本帖最后由 sonichuang 于 2019-1-14 23:54 编辑# a.py
import b
def x():
print('x')
b.y()
# b.py
import a
def y():
print('y')
a.x()
这是小甲鱼教材里面的一道题,执行任何一个文件a.py, 或者b.py都会报错,解释是执行 b.py -> import a -> 查找 a 模块 -> 未发现 a 模块对象 -> 导入 a.py -> import b -> 查找 b 模块 -> 发现 b 模块对象 -> 接着往下执行字节码(import a 已执行过,Python 有机制确保不重复导入,因而不会再执行) -> a.x() -> 在 a 模块中找不到 x(),因为 a 还没有被完全导入嘛……
然后修改后的代码是这样
# a.py
import b
def x():
print('x')
if __name__ == "__main__":
b.y()
# b.py
import a
def y():
print('y')
if __name__ == "__main__":
a.x()
我的问题是,修改后的代码运行的顺序不也是跟修改前的顺序一样吗?怎么不会报错呢?如果执行顺序不一样,那应该是什么顺序呢?
上下两部分代码有区别吗?我们看出来区别啊?
这段程序可以执行啊,没问题啊。
你是不是贴错代码了? sunrise085 发表于 2019-1-14 22:50
上下两部分代码有区别吗?我们看出来区别啊?
这段程序可以执行啊,没问题啊。
前面的代码贴错了 主要是if __name__ == "__main__":这一句,你需要知道这一句下面的代码什么时候会执行,什么时候不会执行。
建议你百度或者知乎下,应该比较好理解。
理解了这一句代码后,再看就简单许多。
a.py作为主运行程序时,执行了__name__=“__main__”语句,b.y()被运行了,而b.py下面的a.x()没有被运行,所以并没有出错。
同理b.py作为主运行时候,name语句执行,a中的b.y()没有运行,同理没有出错。
页:
[1]