鱼C论坛

 找回密码
 立即注册
查看: 2929|回复: 3

[已解决]python中关于__name__ = '__main__' 的代码

[复制链接]
发表于 2019-1-14 22:34:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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()

我的问题是,修改后的代码运行的顺序不也是跟修改前的顺序一样吗?怎么不会报错呢?如果执行顺序不一样,那应该是什么顺序呢?
最佳答案
2019-1-15 10:41:26
主要是if __name__ == "__main__":这一句,你需要知道这一句下面的代码什么时候会执行,什么时候不会执行。

建议你百度或者知乎下,应该比较好理解。

理解了这一句代码后,再看就简单许多。

a.py作为主运行程序时,执行了__name__=“__main__”语句,b.y()被运行了,而b.py下面的a.x()没有被运行,所以并没有出错。

同理b.py作为主运行时候,name语句执行,a中的b.y()没有运行,同理没有出错。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-1-14 22:50:06 | 显示全部楼层
上下两部分代码有区别吗?我们看出来区别啊?
这段程序可以执行啊,没问题啊。

你是不是贴错代码了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-14 23:50:23 From FishC Mobile | 显示全部楼层
sunrise085 发表于 2019-1-14 22:50
上下两部分代码有区别吗?我们看出来区别啊?
这段程序可以执行啊,没问题啊。


前面的代码贴错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-15 10:41:26 | 显示全部楼层    本楼为最佳答案   
主要是if __name__ == "__main__":这一句,你需要知道这一句下面的代码什么时候会执行,什么时候不会执行。

建议你百度或者知乎下,应该比较好理解。

理解了这一句代码后,再看就简单许多。

a.py作为主运行程序时,执行了__name__=“__main__”语句,b.y()被运行了,而b.py下面的a.x()没有被运行,所以并没有出错。

同理b.py作为主运行时候,name语句执行,a中的b.y()没有运行,同理没有出错。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 11:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表