模块
把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。
模块包括:Python内置的模块和来自第三方的模块。
避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,但是,不管是哪个模块都应当注意不要和Python内置函数名冲突。
Python内置函数列表:
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)
可以将相同的模块名放在不同的包内,这样只要包名不冲突,就不会冲突。
包的特点是,每个包目录下都有一个__init__.py文件,这个文件可以是空文件,也可以有代码。
同时,包里也可以有包,进行嵌套。
mycompany
├─ web
│ ├─ __init__.py
│ ├─ utils.py
│ └─ www.py
├─ __init__.py
├─ abc.py
└─ utils.py
自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。
例如:hello.py文件
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module'
__author__ = 'zcc'
import sys # 导入sys之后,相当于系统里有一个变量指向sys模块
def test():
args = sys.argv
# sys里有个叫argv的list型变量,事实上存储着所有命令行的参数,第一个参数永远是调用sys的.py文件的名字。
if len(args) == 1:
print('Hello World')
elif len(args) == 2:
print('Hello %s' % args[1])
else:
print('too many arguments!')
if __name__ == '__main__':
test()
# 第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;
# 第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;
# 第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;
注:当运行某.py文件时,该文件为main文件。Python解释器会把一个叫__name__的特殊变量命名为__main__,而从其他地方导入时,本.py文件的__name__不会发生变化。
作用域
在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在Python中,是通过_
前缀来实现的(类似于java的前缀)
- __xx__这样的变量是特殊变量,用来定义作者名或者模块名。
- 没有前缀的变量就是public
- 有_或者__前缀的变量是private,最好通过模块内部引用
其实,Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。
安装第三方模块
通过包管理工具pip实现。
可以通过Anaconda一次性装多个包。这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库。
模块搜索路径
默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys
模块的path
变量中。