python中的__name__变量

一、__name__

1.1 这个 __name__ 拿来做什么的?

__name__是一个特别的变量,当我们与模块交互时使用,可以让我们区分哪些模块(常指:包和库)导入或者不导入。

1.2 这个 __name__ 变量可能取什么值?

当你执行一段脚本时,这段脚本的默认__name__被赋值为字符串‘__main__’,当这段脚本被导入程序时,__name__被赋值为脚本的文件名。if条件判断为false,就不会继续执行被导入脚本接下来的代码,故if __name__ == '__main__'具有阻止程序自动执行的作用

二、Module

模块是一个独立的代码片段,逻辑上与其他的代码段分开,可以进行复用。模块可以是库文件,函数,类以及Python文件。

 三、Demo(新建两个.py文件,一个是my_script.py,一个是import_my_scrip.py

3.1 验证脚本默认赋值__name__为__main__

 1 # -*- coding: utf-8 -*-
 2 """
 3 @Time : 2023/3/3 10:14
 4 @Auth : T
 5 @File :nameScript.py
 6 @IDE :PyCharm
 7 """
 8 
 9 
10 # 情况一:直接运行脚本
11 def main():
12     myFunction()    # 调用myfunction函数
13 
14 
15 def myFunction():
16     print("变量__name__=", __name__)  # 输出结果:变量__name__= __main__
17 
18 
19 if __name__ == "__main__":
20     main()

流程:

3.2 验证当复用其他脚本文件时__name__的值

 1 # -*- coding: utf-8 -*-
 2 """
 3 @Time : 2023/3/3 10:13
 4 @Auth : T
 5 @File :importingScript.py
 6 @IDE :PyCharm
 7 """
 8 
 9 # 情况二:从外部脚本重用myFunction函数
10 from nameScript import myFunction
11 
12 if __name__ == "__main__":
13     print("变量__name__=", __name__)  # 变量__name__= __main__
14     myFunction()  # 变量__name__= nameScript

流程:

3.3 验证__name__是否有阻止程序自动执行作用

第一种情况:被调用脚本没有if __name__ == "__main__"

 1 # -*- coding: utf-8 -*-
 2 """
 3 @Time : 2023/3/3 10:14
 4 @Auth : T
 5 @File :nameScript.py
 6 @IDE :PyCharm
 7 """
 8 
 9 
10 # 情况一:脚本如果没有if __name__ == "__main__":
11 def main():
12     print("变量__name__2=", __name__)
13     myFunction()    # 调用myFunction函数
14 
15 
16 def myFunction():
17     print("变量__name__1=", __name__)  # 输出结果:变量__name__= __main__
18 
19 
20 # if __name__ == "__main__":
21 main()
# -*- coding: utf-8 -*-
"""
@Time : 2023/3/3 10:13
@Auth : T
@File :importingScript.py
@IDE :PyCharm
"""

# 情况二:外部脚本如果没有if __name__ == "__main__":
from nameScript import myFunction

if __name__ == "__main__":
    myFunction()    # 会一直执行nameScript中的代码,首先调用函数main(),然后输出一个结果,接着调用main()中的myFunction,输出一个结果,再最后调用myfunction函数,共三次结果

输出结果:

 

第二种情况:被调用脚本有if __name__ == "__main__"

 1 # -*- coding: utf-8 -*-
 2 """
 3 @Time : 2023/3/3 10:14
 4 @Auth : T
 5 @File :nameScript.py
 6 @IDE :PyCharm
 7 """
 8 
 9 
10 # 情况二:脚本如果有if __name__ == "__main__":
11 def main():
12     print("变量__name__2=", __name__)
13     myFunction()    # 调用myFunction函数
14 
15 
16 def myFunction():
17     print("变量__name__1=", __name__)  # 输出结果:变量__name__= __main__
18 
19 
20 if __name__ == "__main__":
21     main()
 1 # -*- coding: utf-8 -*-
 2 """
 3 @Time : 2023/3/3 10:13
 4 @Auth : T
 5 @File :importingScript.py
 6 @IDE :PyCharm
 7 """
 8 
 9 # 情况二:外部脚本如果有if __name__ == "__main__":
10 from nameScript import myFunction
11 
12 if __name__ == "__main__":    # 外部脚本如果有if __name__ == "__main__":
13     myFunction()    # 会一直执行nameScript中的代码,if __name__ == "__main__"判断为false,不调用main()函数中的输出语句,只调用myFunction()函数,输出一个结果

输出结果:

 四、参考资料

https://www.bilibili.com/video/BV1te4y1M7yx/?spm_id_from=333.337.search-card.all.click&vd_source=fe50c2f7a31ca9a6be02641333f63067

https://zhuanlan.zhihu.com/p/57309137

https://www.freecodecamp.org/news/whats-in-a-python-s-name-506262fe61e8

 

posted @ 2023-03-03 11:37  Kruskal  阅读(83)  评论(0编辑  收藏  举报