一、模块是什么?
1. Python的标准安装中包含了一组自带的模块,这些模块被称为”标准库"。Python语言之所以被广泛应用于各行各业,得益于它的模块化系统。
2. 另外,开发者完全可以根据自己的需要不断地为Python增加扩展库。各行各业的Python使用者,为Python贡献了大量的扩展库,使得Python的功能越来越强大,这些库形成在Python的“生态圈'。
3. 你可以把Python库当作提前写好的一些Python程序,当用需要时就调用它。任何Python程序都可以做为模块来导入。
4. 对于一个真实的Python程序,开发者不可能自己完成所有的工作,通过需要借助第三方类库,都需要以模块化的方式来组织项目的源代码。
二、模块化编程
1. 导入模块:使用import导入模块,有两种方法
1) import 模块名1[as 别名1 ],模块名2[as 别名2 ],模块名3[as 别名3 ]... 导入整个模块。使用这种方法时,导入模块中的成员,必须使用模块名或模块名前缀。
#导入sys整个模块
import sys
# 使用sys模块名作为前缀来访问模块中的成员
print(sys.argv[0])
# 导入sys整个模块,并指定别名为s
import sys as s
# 使用sys模块别名作为前缀来访问模块中的成员
print(s.argv[0])
2) from 模块名 import 成员名1[ as 别名1], 成员名2[ as 别名2]... 导入模块指定成员。使用这种方法时,无须使用任何前缀,直接使用成员名或成员的别名。
#导入模块内的argv 成员
from sys import argv
# 直接使用成员名访问
print( argv[0])
# 导入模块内的argv成员,并指定别名v
from sys import argv as v
# 直接使用成员别名来访问
print(v[0])
3)使用from...import语法导入成员时,也可以一次性导入所有成员。
from sys import *
print(argv[0])
但是一般不推荐这种方法导入多个模块,如果两个模块中含有相同的函数时,就会存在风险。
2.定义模块: 任何Python程序都可以做为模块来导入。也就是说我们随便写个Python程序,就可以定义成一个模块了。文件名就是它的模块名。下面定义一个简单的模块:
>>> my_name ='Jeff' #定义一个my_name变量
>>> def say_hi(user): # 定义一个say_hi 函数
print('%s,您好,欢迎学习Python' %user)
>>>class User: #定义一个User类
def __init__(self, name):
self.name =name
def walk(self):
print('%s正在慢慢地走路' %self.name)
3. 编写说明文档
为模块编写说明文档,只需要在模块文件的第一行代码之前加入一个字符串直接量就可以了。
'''
这是我编写的第一个模块,该模块包含以下内容:
my_name:字符串变量
say_hi:简单函数
User:用户类
'''
4.编写测试代码: 模块完成之后,我们还需要为模块编写一些测试代码,以确保模块中的每一个程序单元正常运行。
# 以下部分是测试代码
def test_my_name():
print(my_name)
def test_say_hi()"
say_hi('Mary')
say_hi(User('Mary')
def test_User():
u=User('Lily')
u.walk
print(u)
三、加载模块
1. 编写一个模块之后,如果直接使用import或from...import,通常并不能导入模块。因为Python不知道哪里找到这个模块。 为了Python能找到我们编写的模块,我们可以用以下两种方式:
1)使用环境变量
2)将模块放在默认的加载路径下
2. 使用PYTHONPATH环境变量:
PYTHONPATH变量是一个多个路径的集合,这样python会依次搜索PYTHONPATH环境所指的多个路径。在不同的操作平台上,设置环境变量的方式是不同的。
1)在windows平台设置环境变量 :右击桌面“计算机”-单击“属性”-打开“控制面板”-单击“系统和安全”-“系统” - 单击左侧的“高级系统设置” - 新建“系统变量”
变量名:PYTHONPATH
变量值:,;d:\python_module (把新建的模块放在该路径下)
2)在mac OS X上设置环境变量 :
启动 mac OS X的终端窗口(命令行界面)- 进入当前用户的home路径下-然后在home路径下输入:
Is -a # 该命令列出了当前路径下所有文件
使用无格式编辑器,打开.bath_profile - 为该文件增加:
#设置PYTHONPATH变量
PYTHONPATH =.:/User/用户mac上的登录名/python_module
#导入PYTHONPATH变量
export PYTHONPATH
然后,重新登录Mac OS X。
3.默认模块加载路径 : 有些属于对Python本身进行扩展的模块,应该安装在Python的内部,以便被所有程序共享。些时可以借助于Python默认的模块加载路径。
1)Python默认的加载路径由系统变量sys.path代表,可能通过程序查看Python默认的加载路径:
>>> import sys, pprint
>>> pprint.pprint(sys.path) # pprint会比普通print显示更好的打印结果
通常应该把Python模块放在lib\site-packages路径下,它专门用来存放Python扩展模块和包。
2) 新建一个Python模块
>>> '''
简单模块,该模块包括以下内容
my_list:保存列表的变量
print_triangle:打印由星号组成的三角形函数
'''
'\n简单模块,该模块包括以下内容\nmy_list:保存列表的变量\nprint_triangle:打印由星号组成的三角形函数\n'
>>> my_list =['python','kotlin','swift']
>>> def print_triangle(n):
'''打印由星号组成的一个三角形'''
if n<=0:
raise ValueError('n必须大于0')
for i in range(n):
print(''*(n-i-1), end='')
print('*'*(2*i+1), end='')
print('')
>>> #====以下是测试代码====
>>> def test_print_triangle():
print_triangle(3)
print_triangle(4)
print_triangle(7)
>>> if __name__=='__main__':test_print_triangle()
将其存放在lib\site-packages路径下,在编辑器中输入命令调用模块。
>>>import print_shape
>>>print(print_shape.__doc__)
简单模块,该模块包括以下内容
my_list:保存列表的变量
print_triangle:打印由星号组成的三角形函数
>>>print_shape.print_trianlge.__doc__
#测试该模块中的变量my_list变量和print_triangle()函数。
>>> print_shape.my_list[1]
'kotlin'
>>> print_shape.print_triangle(4)
四、使用包
1. 什么是包?
一个实际需要的模块,往往有很多的程序单元,如果都放在一个源文件中,这个文件会非常的庞大。为了更好的管理多个模块源文件,Python提供的包的概念。
包就是一个文件夹,在该文件夹下包含了一个__init__.py文件,该文件夹可用于包含多个模块的源文件。
包的作用是用于包含多个模块,其本质也是模块,因此包可以用于包含包。
例如:
当我们为Python安装了numpy模块后,可以在Python安装目录下的lib/site-packages目录下找到一个numpy文件夹,它其实是一个包。 该文件夹下面既包含了matlib.py等模块源文件,也包含了core等子包。
2. 如何定义包?
1)创建一个文件夹,该文件夹的名字就是该包的包名。
创建一个文件夹,命名为:first_package
2)该文件夹内添加一个__init__.py文件即可。
在该文件夹内添加一个__init__.py文件。内容:
>>>'''
这是学习包的第一个示例
'''
>>>print(' this is first_package')
3. 如何导入包?
包的本质就是模块,所以导入包和导入模块的语法完全一样。
例如:
>>>import first_package
>>>print(type(first_package)
>>>print(first_package)
五、本节回顾
1. 什么是模块?
2. 如何创建模块?导入模块?使用模块?
3. 什么是包?
4. 如何定义和导入包?