小技巧总结(1)if __name__=='__main__':用法

一、原理

假设有两个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__        

 

posted @ 2020-03-16 15:23  Alex-jiang  阅读(280)  评论(0编辑  收藏  举报