自学Python之路-Python基础+模块+面向对象
自学Python之路-Python网络编程
自学Python之路-Python并发编程+数据库+前端
自学Python之路-django
自学Python6.1-模块简介
在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的。
那么在Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似
比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块。
模块,用一砣代码实现了某个功能的代码集合。
类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。
而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。如:os 是系统相关的模块。
模块分为三种:
- 自定义模块
- 第三方模块(开源模块)
- 内置模块(标准库)
一 、自定义模块与第三方模块(开源模块)
1.1 如果你自己定义一个模块,想开源提供给他们使用,是一个开源模块的集散地 https://pypi.python.org/pypi
1.2 如何安装第三方模块?
方式一:yum
pip (python专用)
apt-get
方式二:下载源码- 解压源码-进入目录-编译源码- 安装源码python setup.py install
1.3 自定义一个模块
举例,建设一个简单的web框架
①首先创建一个Python Package文件,而不是Directory , 区别是Python Package多了一个空的_init_.py空文件(包,该文件表示允许跨目录函数导入)
②在web 下面创建两个Package
Frontend 前端(页面相关的东西)
Backend 后端逻辑处理 程序之间关联度/依赖性降低,松耦合/解耦,因为这样才能几个人并行负责单独的模块,互相调用提高开发效率、代码复用、专业人士开发专用模块 只要接口一致数据库交互查询搜索更改增加等处理结果。
③ 配置文件 存数据库连接信息相关、html代码(全局)
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
比如有这样一个文件test.py,在test.py中定义了函数add:
#test.py def add(a,b): return a+b
那么在其他文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入。
1.4 模块的导入
①将模块放置在同一级内
②通过路径添加
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:
模块名.函数名
import math print sqrt(2) #这样会报错 print math.sqrt(2) #这样才能正确输出结果
注释:为什么必须加上模块名这样调用呢?因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。
导入模块有一下几种方法:
import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
导入模块其实就是告诉Python解释器去解释那个py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的 __init__.py 文件 【py2.7】
模块导入的路径
sys.path
import sys print (sys.path)
输出:
['D:\PyCharm Community Edition 2016.3.2', 'D:\PyCharm Community Edition 2016.3.2', 'C:\Users\carlos.jiang\AppData\Local\Programs\Python\Python36-32\python36.zip', 'C:\Users\carlos.jiang\AppData\Local\Programs\Python\Python36-32\DLLs', 'C:\Users\carlos.jiang\AppData\Local\Programs\Python\Python36-32\lib', 'C:\Users\carlos.jiang\AppData\Local\Programs\Python\Python36-32', 'C:\Users\carlos\AppData\Local\Programs\Python\Python36-32\lib\site-packages']
安装的路径可能会有些不同,但是site-packages目录是最佳选择,故只要将模块放入site-packages这样的目录中,所有程序就都能将其导入了。
如果sys.path路径列表没有你想要的路径,可以通过 sys.path.append('路径') 添加。
import sys import os project_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(project_path)