• if __name__


     我们经常在python 程序中看到 if __name__ == '__main__' :这代表什么意思?
       python中 模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的__name__的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。
    具体一点,在cmd 中直接运行.py文件,则__name__的值是'__main__';
    而在import 一个.py文件后,__name__的值就不是'__main__'了;
    从而用if __name__ == '__main__'来判断是否是在直接运行该.py文件

    [root@rac1 python]# cat st.py
    #!/usr/bin/evn python
    import os 
    import time
    file = "/root/sed.txt"
    def dump(st):
       mode,ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
       print "- size :", size, "bytes"
       print "- owner:", uid, gid
       print "- created:", time.ctime(ctime)
       print "- last accessed:", time.ctime(atime)
       print "- last modified:", time.ctime(mtime)
       print "- mode:", oct(mode)
       print "- inode/dev:", ino, dev
    # # get stats for a filename
    if __name__ == '__main__':
      st = os.stat(file)
      print "stat : "
      print  dump(st) 
    # # get stats for an open file
      fp = open(file)
      st = os.fstat(fp.fileno())
      print "fstat : "
      print  dump(st)

    你在cmd中输入:
    [root@rac1 python]# python st.py
    stat : 
    - size : 23 bytes
    - owner: 0 0
    - created: Tue Nov 20 21:56:19 2012
    - last accessed: Wed Nov 21 14:43:08 2012
    - last modified: Tue Nov 20 21:56:19 2012
    - mode: 0100644
    - inode/dev: 17039538 2051
    None
    fstat : 
    - size : 23 bytes
    - owner: 0 0
    - created: Tue Nov 20 21:56:19 2012
    - last accessed: Wed Nov 21 14:43:08 2012
    - last modified: Tue Nov 20 21:56:19 2012
    - mode: 0100644
    - inode/dev: 17039538 2051
    None
    说明:"__name__ == '__main__'"是成立。
    [root@rac1 python]# python
    Python 2.5 (r25:51908, Jun  6 2012, 10:32:42) 
    [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os
    >>> __name__           #当前程序的__name__
    '__main__'
    >>> 
    >>> 
    >>> import st
    >>> st.__name__         #st 模块的__name__
    'st'
    >>> 
    无论怎样,st.py中的"__name__ == '__main__'"都不会成立的!
    所以,下一行代码永远不会运行到!



    C/C++/Java中,main是程序执行的起点,Python中,也有类似的运行机制,但方式却截然不同:Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。

     

    每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。这个特性,为测试驱动开发提供了极好的支持,我们可以在每个模块中写上测试代码,这些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起。

     

    典型的Python文件结构:


  • 相关阅读:
    ubuntu18.04安装g2o
    akka学习
    spark学习记录-2
    spark学习记录-1
    c++ string需要注意的地方
    clion server激活地址
    【转】c++面试基础
    c++反射概念-简单介绍
    死锁的理解
    c++ 反射类型
  • 原文地址:https://www.cnblogs.com/baoendemao/p/3804706.html
Copyright © 2020-2023  润新知