1. 模块和包
1.1 模块:
一个 py 文件,就是一个模块,文件中包括定义的函数和类等信息。
尽管可以 import 多次,实际上模块只导入一次
模块搜索路径内存中已经加载的模块 -> 内置模块 -> sys.path路径(导模块的环境变量)中包含的模块
导入模块
-
将整个模块导入 import 模块名
-
导入所有函数 from 模块名 import *
-
从模块中导入某个函数 from 模块名称 import 函数1(, 函数2...) 也可以是属性
使用区别
import 模块名
form 模块名 import *
调用模块函数(属性)时的格式是 模块.函数属性)
from 模块名 import 函数名(属性名)
可以直接使用,无需添加模块名
1.2 包:
当一个目录内含有 __init__.py
文件时,就可以视该目录为一个包,一个包由多个文件构成。
导入包
-
导入包名
# import 包名
from xxx import requests
- 从包里面导入方法
# from 包名 import 方法/对象
from requests import get
- 从包的文件里面导入对象
# from 包名.文件名 import 方法/对象
from requests.api import get
1.2.1 __init__.py
文件
该文件,可以表示该目录是一个包,内容可以为空,第一次导入包或者是包的任何其他部分,实际就是导入该文件。
因此,我们在该文件中导入需要的模块(别人在导入包的同时,也就导入 __init__.py
文件中的模块),这样在使用时,用户感觉可以将这个包当作模块使用,而不关心其背部结构。
例如:requests 包中的 __init__.py
主要文件内容如下:
from . import utils
from . import packages
from .models import Request, Response, PreparedRequest
from .api import request, get, head, post, patch, put, delete, options
from .sessions import session, Session
from .status_codes import codes
from .exceptions import (RequestException, Timeout, URLRequired,TooManyRedirects, HTTPError, ConnectionError,FileModeWarning, ConnectTimeout, ReadTimeout
)
其他模块在导入时,就可以简单的使用,不用关心其内部结构(使得导入包 向导入模块一样简单)
1.2.2 特殊变量__all__
__init__.py
不仅仅用来导入模块,其本身也可以加入代码,其中存在特殊变量 __all__
,该变量是一个列表,列表中以字符串的格式存放变量或者函数,在执行 form 包 import * 时,导入该列表内容。示例:
# filename: a.py
__all__ = ['add']def add(a, b):return a + bdef sub(a, b):return a - b
from a impory * r = add(1, 2)
print(r)
r = sub(1, 2)
print(r)
1.2.3 相对路径导入
在 requests
目录结构中,__init__.py
和 api.py
在同一目录下,因此在 __init__.py
文件中想要导入 api.py
文件,可以使用相对路径,也就是使用linux系统中的 .(本目录) 和..(上级目录),并且只能在一个目录中使用,不能用于不同目录内
2. 包与框架
2.1 包(库)
python 的包只实现一个单一的功能。例如 random 库只实现了随机函数,re 实现了正则提取的方式,requests 实现了网络请求,lxml 实现了提取网页数据的功能。
2.2 框架
2.2.1 scrapy(爬虫)
实现了一整套的爬虫解决方案。从发送请求(requests),到数据解析(re、xpath、css选择器),再到数据保存(csv、json、pickle)。同时还有非常强的拓展性。支持配置请求中的参数,修改处理数据的方式,以及对接其他的数据存储(msyql、redis、mongodb)。
2.2.2 flask(web 框架)
实现了基本的路由(处理 http 请求)、与模板(html网页)。同时还有支持拓展数据库管理(flask-sqlalchemy)、权限管理(flask-login)、restfull拓展(flask-jwt)。
2.2.3 数据分析
数据分析暂时没有框架,主要由各种库构成。numpy、pandas、matplotlib。同时还有sk-learn、scipy 数据挖掘库
TensorFlow 是一个人工智能框架,主要是封装了以上一个库。