python文件的两种用途
-
编写好的一个python文件可以有两种用途:
一:脚本,一个文件就是整个程序,用来被执行
二:模块,文件中存放着一堆功能,用来被导入使用 -
python为我们内置了全局变量__name__,
当文件被当做脚本执行时:__name__ 等于'__main__'
当文件被当做模块导入时:__name__等于模块名作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':直观理解:
对于当前运行的程序test.py而言,__name__ 变量的值是"__main__"。
如果run.py调用了test.py,即import test,那么对test.py而言name变量的值是"test",对于run.py而言name变量的值是"main"。
背后原因:
有时我们写了可以直接被执行的模块(.py文件),但是在另一个程序中调用它时,我们其实只是想用一用里面写好的函数,而不是全都执行一遍。那么我们就可以把执行的部分放到if __name__ == '__main__' 中进行判断。
如果if__name__ == '__main__' 为真,就说明我们是在直接执行这个模块,那么所有的操作都要运行一遍;但如果为假,就说明我们是引用了这个模块,只有在需要用到它的函数时,才会被调用执行。
x = 1
def f1():
print('from f1')
def f2():
print('from f2')
f1()
f2()
如果直接运行run.py会直接运行aaa.py中的f1()和f2(),但是如果我们在aaa.py中加上if __name__== '__main__:这句话,则可以防止运行run.py时执行f1()和f2()。因为当aaa.py被直接执行,即当做执行文件的时候__name__ == '__main__'; 在aaa.py被当做模块直接运行的时候__name__ == 'aaa'。由此可以让aaa.py在不同的场景下有着不同的用法。
# aaa.py
x = 1
def f1():
print('from f1')
def f2():
print('from f2')
if __name__ == '__main__':
f1()
f2()