美文网首页
if __name__ == '__main__' 这段代码该如

if __name__ == '__main__' 这段代码该如

作者: 半音阶 | 来源:发表于2017-06-19 22:15 被阅读0次

    作者:张steel

    链接:https://www.zhihu.com/question/58646802/answer/158556775

    来源:知乎

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

    python中目录可以理解成一个包(package),一个源文件可以备理解成一个模块(module)。当你写了一个python文件时,有两种方式可以使用它,一种是直接调用(python example.py),一种是将它import到另一个模块中使用(比如在模块another_example.py中使用语句——import example)。python 解释器在执行一个module里面的代码之前,会定义一些特殊的变量。就比如题主所问中的__name__变量。如果是解释器将这个module作为主程序去执行的时候(上面的第一种方式),它会将__name__设置成值: __main__。如果这个module是被其他module import的话(上面第二种方式),那么它的__name__会被设置成它的模块名。下面代码展示了__name__的值会随着调用该模块的方式不同而不同。[root@108 testproject]# cat example.py

    print "The value of __name__ is: " , __name__

    [root@108 testproject]# cat another_exampel.py

    import example

    [root@108 testproject]# python example.py

    The value of __name__ is:  __main__

    [root@108 testproject]# python another_exampel.py

    The value of __name__ is:  example

    知道了__name__不同值的意义,我们再来看“if __name__ == '__main__'”就很好理解了。当你直接调用我时,if 条件为True,if 里面的代码段才会执行。如果你是import 我,那么if 条件为False, if 里面的代码段就不执行啦。有了if __name__ == '__main__', 你可以在当前模块内验证模块的功能而不会影响import该模块的其他模块。例如,python官方库中wsgiref 实现了一个符合wsgi规范的web服务器,在它源码的最后,给出了一个如何用wsgiref起一个web服务的简单步骤。if __name__ == '__main__':

    httpd = make_server('', 8001, demo_app)

    sa = httpd.socket.getsockname()

    print "Serving HTTP on", sa[0], "port", sa[1], "..."

    import webbrowser

    webbrowser.open('http://localhost:8000/xyz?abc')

    httpd.handle_request()  # serve one request, then exit

    相关文章

      网友评论

          本文标题:if __name__ == '__main__' 这段代码该如

          本文链接:https://www.haomeiwen.com/subject/yfjwqxtx.html