夏令营结束啦!拿到了几个心仪的offer,也就抽出时间来复盘一个我印象比较深的面试问题
面试老师问:你对Python的if __name__=='__main__'
如何理解的?
我:(心中窃喜)
答:import
文件内的if name = main
不会执行,当前.py文件内的代码if name = main
会执行
虽然感觉回答还可以,但总想了解一些详细的细节部分,就来详细复盘一下
概述
我们知道,java/C++
等是编译型语言,即执行前会将高级语言代码预先编译为中间代码,而Python是解释性语言,因此在运行时是从模块顶行开始,逐行执行。(这也是通常情况下Python会比C++慢一些的原因之一)
因此,其实Pyhton也就没有像编译型语言角度中的主程序main函数
。但也有类似的作用,即告诉阅读者,这是当前开始执行的.py文件。
__name__属性的作用与意义
先上结论: 我们在导入(import module
)模块的时候,__name__属性可以避免在当前A.py文件导入B模块的时候就执行一些程序,这些程序我们只想让B.py文件作为当前文件的时候执行的代码。
比如,我们可以这样进行测试:
-
当前文件是A.py,我们执行
print(__name__)
的时候,输出结果是__main__
-
当前文件是A.py,B.py作为外部导入的模块
import B
print(B.__name__)
输出结果是B
因此__name__ == ‘main‘ 就表示在当前文件中,可以在if name == ‘main‘:条件下写入测试代码,如此可以避免测试代码在模块被导入后执行。
总结
当运行if __name__=='__main__':
语句时,如果是在当前文件中,那么__name__
的值就是__main__
,同时if __name__ =='__main__
下面的代码程序就会执行了。
恭喜龙哥
同喜杰哥!一起冲啦啦!