python __init__.py __name__ __doc__ __file__ argv[0] 浅析
来源:互联网 发布:网络投票 编辑:程序博客网 时间:2024/06/06 05:36
python __init__.py __name__ __doc__ __file__ argv[0] 浅析:
1》__init__.py
在eclipse PyDev 某个工程下创建文件夹和包的区别:包中含有__init__.py文件,
而文件夹中没有__init__.py文件,将包中的__init__.py文件复制到文件夹中,文件夹就变成了包,
可见包和文件夹只差了一个__init__.py文件。
2》内建变量__name__(用来判断当前文件是否为主文件)
__name__属性 用于判断当前模块是不是程序入口,
如果当前程序正在使用(即该模块被直接执行),__name__的值为__main__。
如果模块是被导入当前程序,则该模块中的__name__的值是该模块的名字
下面用到了haha.py文件和other.py文件,二者间的关系如下图:
folder包和main包以及other.py文件都位于python day03工程内。。。
haha.py文件:
#!/usr/bin/env python#coding:utf-8def foo(): bar() print 'foo()','this is foo function!' def bar(): print 'bar()','this is bar function!'print __name__if __name__=='__main__': foo()else: print 'goodbye!'执行该文件,结果如下:
__main__ #执行haha.py文件,__name__的值是'__main__',if语句后的条件为真,转去调用foo函数
bar() this is bar function!
foo() this is foo function!
other.py文件:
#!/usr/bin/env python#coding:utf-8print __name__from folder import haha执行该文件,结果如下:
__main__ #执行other.py文件,该文件中的__name__的值是'__main__'
folder.haha #haha模块被导入到other.py文件中,haha.py文件中的__name__的值是'folder.haha'
goodbye! #haha.py文件中的__name__的值是'folder.haha',因此if语句后的条件为假,所以打印出'goodbye!'
3》__doc__属性
模块,类,函数本身是一个对象,而每个对象都会有一个__doc__属性。该属性用来描述该对象的作用。
如下程序:
#!/usr/bin/env python#coding:utf-8'''This is my first python program!'''class myClass: '''This is my first class!''' def printf(): '''print some information!''' print 'hello python!'def myFun(): '''This is my first function!''' print 'hello world!'print __doc__ #输出该python文件的说明信息print globals()['__doc__']#该语句与上一条语句作用一样print myClass.__doc__ #输出myClass类的说明信息print myClass.printf.__doc__ #输出成员函数printf的说明信息myFun()#调用 myFun函数print myFun.__doc__ #输出函数myFun的说明信息运行程序,输出结果:
This is my first python program!
This is my first python program!
This is my first class!
print some information!
hello world!
This is my first function!
4》__file__ 与argv[0]
在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和__file__
获取主文件路径的最佳方法是用sys.argv[0],内建变量__file__ 也可用来获得模块所在的路径。
比如在脚本test.py中写入:
#!/usr/bin/env python#coding:utf-8'''This is my first python program!'''import sysprint sys.argv[0]print __file__4.1>按相对路径./test.py来执行,则打印得到的是相对路径:
E:\workspace\python day03\main>python ./test.py
./test.py
./test.py
E:\workspace\python day03\main>
4.2>按绝对路径执行则得到的是绝对路径:(由于该绝对路径中包含空格,需要加上双引号,否则会找不到文件)
C:\Users\91135>python "E:\workspace\python day03\main\test.py"
E:\workspace\python day03\main\test.py
E:\workspace\python day03\main\test.py
C:\Users\91135>
综上所述,argv[0]和__file__得到的可能是相对路径,也可能是绝对路径,
为了确保得到绝对路径, 可以使用os.path.realpath()或 os.path.abspath()
如下python代码:
#!/usr/bin/env python#coding:utf-8'''This is my first python program!'''import sys,os#以下2句,若按相对路径执行,得到的是相对路径,若按绝对路径执行,得到的是绝对路径print sys.argv[0]print __file__#以下4句能够确保得到的是绝对路径print os.path.abspath(sys.argv[0])print os.path.realpath(sys.argv[0])print os.path.abspath(__file__)print os.path.realpath(__file__)运行结果:
E:\workspace\python day03\main>python ./test.py
./test.py #按相对路径./test.py来执行,则打印得到的是相对路径
./test.py #同上
E:\workspace\python day03\main\test.py
E:\workspace\python day03\main\test.py
E:\workspace\python day03\main\test.py
E:\workspace\python day03\main\test.py
E:\workspace\python day03\main>
注意:在Python控制台下,直接使用print __file__是会导致错误: NameError: name '__file__' is not defined
因为这时没有在任何一个脚本下执行,自然没有 __file__的定义了。
同理,直接使用 print argv[0]也会报错:NameError: name 'argv' is not defined
(完)
- python __init__.py __name__ __doc__ __file__ argv[0] 浅析
- self、__doc__、__init__、__name__
- python中的__doc__,__name__
- python __file__ 与argv[0]
- python __file__ 与argv[0]
- python __file__ 与argv[0]
- python __file__ 与argv[0]
- python __file__ 与argv[0]
- Python语言中的__name__和__doc__
- python的 __name__和__doc__属性
- python学习十一(__name__,__init__.py,导入包和方法)
- python __init__.py
- python __init__.py
- python __init__.py
- python __init__.py
- python之 __init__.py
- python __init__.py介绍
- 【python】__init__.py
- [树状数组] poj 1990 MooFest
- HDOJ 2199 Can you solve this equation?
- BD___工厂模式
- 第5章 报警
- 64位和32位程序性能差别
- python __init__.py __name__ __doc__ __file__ argv[0] 浅析
- javascript-计算24
- MySql 使用foreach标签 批量插入list中数据,主键自增,插入
- 第一章-了解Web及网络基础
- JAVA的String 类
- Spacemacs 的更新和回滚
- linux中mysql修改编码utf8
- 我想尝试能不能设置博客的私密性
- 原生js,JQuery查找元素,修改类名