【python】if __name__ == '__main__' 淺析

楊奇龍發表於2013-05-05
      我們經常在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__'"都不會成立的!
所以,下一行程式碼永遠不會執行到!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-759793/,如需轉載,請註明出處,否則將追究法律責任。

相關文章