模块
在python中,一个.py文件就是一个模块,引入一个模块后,就可以用这么模块名调用其里面的所有声明的方法和变量。
模块的结构
python的模块结构类似java,不过要把一个目录声明为包目录,需要在目录下放置一个__init__.py
文件,这个文件也代表这个目录的默认模块,也可以不放__init__.py
,不过这样就不能直接引用该目录的默认包了。
例如:
可以这么引用:
>>> import pack
>>> pack.test()
pack
>>> from pack import test #可以只引用某一个方法或变量
>>> test()
pack
>>> import pack.mod
>>> pack.mod.test()
pack.mod
>>> pm = pack.mod #可以将长模块付给变量
>>> pm.test()
pack.mod
>>> import pack.pack1
>>> pack.pack1.test()
pack.pack1
>>> import pack.pack1.mod
>>> pack.pack1.mod.test()
pack.pack1.mod
>>>
作用域
类似__xxx__
这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如__author__
,__name__
就是特殊变量,我们自己的变量一般不要用这种变量名。
类似_xxx
和__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc
,__abc
等。
之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
标准模块示例:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
#使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名
__author__ = 'Michael Liao'
import sys
def test():
args = sys.argv
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!')
#当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__,
#而如果在其他地方导入该hello模块时,if判断将失败
if __name__=='__main__':
test()