if __name__=='__main__'理解

今天在参考别人代码学习tensorflow时(代码如下),总觉得代码中的main函数内FLAGS变量没有定义,当时觉得好神奇哦(因为我把if name == ‘main’:及下面这一段当做的一个函数,类似于java中的psvm了),然后翻看了半天if name==‘main’ 的解释,然后恍然大悟,python是按行解释的呀,if name == 'main’只是一个判断语句,里面的都是全局变量啊。

def main(_):
    print('FLAGS:',FLAGS)
    if not tf.gfile.Exists(FLAGS.data_dir):
        tf.gfile.MakeDirs(FLAGS.data_dir)

if __name__ == '__main__':
    FLAGS, unparsed = parser.parse_known_args()
    tf.app.run()

虽然是个乌龙,但是正好学习了一下__name__

__name__是python的一个内置属性,用来表示当前模块的名字,那么这个属性值是什么样的呢?假设建立一个test1.py文件,文件内容如下:

def test1():
	print(__name__)
test1()

运行文件,将会输出:

__main__

此时__name__的值就是__main__

若此时在创建一个test2.py文件,并且在test2中调用test1:

from test1 import test1
test1()
print(__name__)

此时的输出为:

test1
test1
__main__

即无论是test1.py文件内的调用的test1()还是test2.py文件中调用的test1(),此时__name__值都为test1,正式test1()还是所在的模块名,而test2.py内的运行的__name__仍然是__main__,这其实是一个指代问题,其模块自我调用运行时,此时我的名字__name__就可以用“我”(__name__)来指代,而运行其他模块时,则需明确模块的名字。

朋友眼中你是小明(__name__ == '小明'),
你自己眼中你是你自己(__name__ == '__main__'),

你编程很好, 朋友调你去帮他写程序(import 小明, 这时你在朋友眼中: __name__ == '小明'),
但你晚上也会打开xx网站, 做一些自己的事情(直接运行小明.py, __name__ == '__main__')

源博客: if __name__ == '__main__' 如何正确理解

上面一段的引用个人觉得解释的非常清楚。

所以, if __name_ _=='_ _main__'是python对自己模块进行验证的时候进行的一个假性程序入口。

猜你喜欢

转载自blog.csdn.net/weixin_42933718/article/details/88065491