鱼C论坛

 找回密码
 立即注册
查看: 1765|回复: 2

import 问题

[复制链接]
发表于 2023-8-15 22:01:11 | 显示全部楼层 |阅读模式

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

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

x
# 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()

当b.py为主程序时,为什么if __name__ == "__main__":后能执行a.x(), a 模块的x()不是没导入吗(半导入)
求大神指教

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-15 22:01:26 | 显示全部楼层
在Python中,当一个模块被导入时,它的代码会被执行一次。在这个例子中,当b.py作为主程序运行时,它会导入a模块。由于a模块中的代码包含在if __name__ == "__main__":条件下,所以a模块中的x()函数会被执行。

当b.py作为主程序运行时,Python解释器会首先执行b.py中的代码。在执行b.py中的import a语句时,Python解释器会检查a模块是否已经被导入。由于a模块尚未被导入,所以Python解释器会继续执行a模块的代码。在a模块的代码中,if __name__ == "__main__":条件为False,所以a模块中的x()函数不会被执行。

接下来,当b.py中的b.y()函数被调用时,Python解释器会执行b.py中的y()函数。在y()函数中,没有对a模块的任何引用,所以a模块的代码不会再次执行。

总之,当b.py作为主程序运行时,它会导入a模块并执行a模块中的代码,但a模块的代码中的if __name__ == "__main__":条件为False,所以a模块的x()函数不会被执行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-15 22:01:45 | 显示全部楼层
代码解释:

在 Python 中,当一个模块被导入时,它会执行其中的代码,并创建一个模块对象。这个模块对象包含了模块中定义的函数、变量等。

在以上代码中,当 b.py 作为主程序被执行时,在 b.py 文件中执行 import a,即导入了模块 a。这时会执行 a.py 中的代码。虽然 a.py 中的 import b 语句已经执行过了,但是由于 Python 已经创建了 b 模块对象,因此不会再次执行 b.py 中的代码。而是直接使用之前创建的 b 模块对象。

所以,在 b.py 的主程序中调用 a.x() 是可以正常执行的,因为 b 模块已经包含了 a.x 函数,无需再次导入 a 模块。

修改后的代码:

# a.py
def x():    print('x')if __name__ == "__main__":    import b    b.y()
# b.py
def y():    print('y')if __name__ == "__main__":    import a    a.x()
希望以上解释对你有所帮助。如果还有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 19:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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