一、原理
假设有两个py文件
(1)learn.py
//learn.py def learn(): print('i am learning!')
(2)call.py
import learn learn.learn()
此时执行python learn.py后没有展示任何结果,因为只是执行但没有调用,再执行python call.py,会输出i am learning!,因为我们导入了learn模块并进行了调用。
(1)learn.py
//learn.py
print(__name__) #此时插入变量name,py编译器调用一个脚本的时候时,它会自动创建这个变量并分配这个变量的值
def learn():
print('i am learning!')
此时learn.py直接打印会输出一个 __main__
(2)call.py
import learn
learn.learn()
此时call.py直接打印会输出以下结果,
learn #因为call.py引入了learn.py(learn.py被引入文件)分配的值,这个learn(来源__name__)就是learn.py的文件名,
i am learning!
总结原理name是py解释器自动创建并且分配值的一个变量可以直接使用,
二、用途
展示一:
(1)learn.py
//learn.py
def learn():
print('i am learning!')
learn() #当没有call.py文件时,进行自测,脚本调用learn
输出结果:
i am learning! #此时成功调用learn输出了一个结果
(2)call.py
import learn
learn.learn()
输出结果: #因为第一次引入learn.py的learn()时已经执行了一个结果,所以call.py再调用时生成了二次执行
i am learning!
i am learning!
展示二:
(1)learn.py
//learn.py def learn(): print('i am learning!')
if __name__=='__main__'
learn()
输出结果:
i am learning!
(2)call.py
import learn learn.learn()
输出结果:
i am learning!
总结:展示二的learn.py文件里的__name__判断当前脚本是不是被python直接调用的,应用上可以说用于做测试,方便控制代码,保证__name__在if里什么时候执行什么时候不执行,总的来说就是在py直接被调用时 执行__name__ ,被引入时不去执行 __name__