关于python的 __name__== "__main__"

本文深入探讨Python中__name__属性的使用,解释它如何帮助区分直接运行的脚本与导入的模块,并提供了一个解决在导入模块时避免执行特定代码的实用方法。通过实例演示,读者可以掌握如何利用__name__属性实现更灵活的脚本执行逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由解释器在最高层调用执行的语句,不管它是从脚本文件中读入还是来自交互式输入,都是  __main__ 模块的一部分。

而 __name__ 是模块的一个属性。

当解释器直接运行python脚本(假设称之为 demo.py),则在其中print __name__ ,我们会得到的结果是:__main__ 。

而如果是通过别的python脚本(假设称之为demo2.py)来调用(或者说import)时,如果我们输入这样的命令:demo.__name__ ,结果则不是__main__,因为现在运行的是demo2.py , 只有它的__name__的值才是 __main__ 。而如果我们本身在demo.py中就有print __name__ 这样的命令,我们也可以看到,这条语句也不会输出 __main__ , 因为可以理解为 __main__ 是demo2所特权所有的。


那么这有什么用呢?


我们知道我们在import demo.py的时候,功能上相当全部拷贝进demo2.py中去,这样在执行demo2.py的时候demo.py的命令也都会被执行。有时我们只是想要demo.py中定义的一些方法和属性而已。

一般情况下,我们可以在demo.py中只定义我们要的方法和属性,而不去输入命令,这样问题也就差不多解决了,而现在情况有点特殊,我们还想在demo.py放进去一点命令(有时候这是很有必要的),这些命令只有在直接运行demo.py的时候才需要被执行,这个时候,如何避免demo2.py执行过程中还执行了demo.py的命令呢?


解决办法是这样的:

demo.py

if __name__ == '__main__':
    """这里开始写你只想要在demo.py中执行的代码"""

这样,在运行demo2.py的时候,因为在demo.py中,__name__的值为demo,所以你写的代码不会被执行。

而在直接运行demo.py的时候,这是在demo.py中,__name__的值为 __main__,此时你写的代码就会执行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值