stay hungry stay foolish

python(模块)

模块

在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()