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

简介:       我们经常在python 程序中看到 if __name__ == '__main__' :这代表什么意思?   python中 模块是对象,并且所有的模块都有一个内置属性 __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__'"都不会成立的!
所以,下一行代码永远不会运行到!
目录
相关文章
|
5月前
Python-int()
Python-int()
138 0
|
5月前
|
Python
python中if __name__ == '__main__'
python中if __name__ == '__main__'
42 3
|
5月前
|
Python 容器
Python中is和==的区别有多大,你知道吗?
Python的`is`比较对象身份,`==`比较值。`is`检查对象的ID(内存地址),而`==`关注值是否相等。当对象值相同但位于不同内存位置时,如列表`[3,6,9]`,`x==y`和`x==z`为`True`,但`x is z`为`False`,因它们ID不同。数值和字符串常量重复时,`is`也返回`True`,但其他容器类型如元组、列表、字典和集合,即使值相同,`is`仍返回`False`,因它们在内存中总是不同对象。
28 0
Python中is和==的区别有多大,你知道吗?
python中的 return函数怎么去理解?
python中的 return函数怎么去理解?
|
Python
Python中的==和 is
Python中的==和 is自制脑图 == / !=比较的是对象的值是否相等。 is / is not比较的是对象的 id 是否相等(比较两个对象是否是同一个对象)。
79 0
Python中的==和 is
|
Python
【Python中is和==的区别】
在Python中一切都是对象。
|
Python
说说Python 中 is 和 == 的区别?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!
101 0
说说Python 中 is 和 == 的区别?
|
Python Shell 开发工具
python项目中为什么经常看见“ if __name__ == ‘__main__’:”?
前言尽管大家在编写python会允许你像shell脚本一样,把大量代码堆积在一起,但是,有很多python入门的书籍,都会建议封装一个函数去写(面向对象也可以写),然后在最后统一调用,例如这样 : def main(): #具体代码 if __name__ == '__main__': main() 很多文章都会说这是由于代码样式等原因,但实际上,不这样写,有时会直接导致错误。
1045 0
|
存储 Python 开发工具
你想了解Python中的 == 和IS 其他?
前言 比较对象值时使用 == 等逻辑操作符,比较的是对象的值;比较对象身份时使用 is 和 is not 操作符,比较的是对象的本身,即可理解为对象的地址,该地址可以由id()函数获得。 理解过程中可以类比 C 语言中变量的比较,例如对于变量 a 和 b,比较值相当于 a == b,比较身份相当于 &a == &b,即对两个变量分别取地址,之后比较这两个地址。
871 0