02-Python 模块
说一下你对 Python 中模块和包的理解。
每个 Python 文件就是一个模块,而保存这些文件的文件夹就是一个包,但是这个作为 Python 包的文件夹必须要有一个名为 __init__.py
的文件,否则无法导入这个包。
通常一个文件夹下还可以有子文件夹,这也就意味着一个包下还可以有子包,子包中的 __init__.py
并不是必须的。模块和包解决了 Python 中命名冲突的问题,不同的包下可以有同名的模块,不同的模块下可以有同名的变量、函数或类。
在 Python 中可以使用 import
或 from ... import ...
来导入包和模块,在导入的时候还可以使用 as
关键字对包、模块、类、函数、变量等进行别名,从而彻底解决编程中尤其是多人协作团队开发时的命名冲突问题。
如何安装第三方模块
pip 包管理器
源码下载,解压
1
2python setup.py build
python setup.py install
常用模块都有那些
模块名 | 介绍 |
---|---|
sys | 跟 Python 解释器相关的变量和函数,例如:sys.version 、sys.exit() |
os | 和操作系统相关的功能,例如:os.listdir() 、os.remove() |
re | 和正则表达式相关的功能,例如:re.compile() 、re.search() |
math | 和数学运算相关的功能,例如:math.pi 、math.e 、math.cos |
json | 和序列化相关的功能,例如:json.dumps 、json.loads |
random | 产生随机数,例如:random.random() |
logging | 和日志系统相关的类和函数,例如:logging.Logger 、logging.Handler |
time/datetime | 和时间相关的函数,例如:time.time 、datetime.datetime.now |
json/pickle/shelve | 实现对象序列化和反序列的模块,例如:json.loads 、json.dumps |
hashlib | 封装了多种哈希摘要算法的模块,例如:hashlib.md5 、hashlib.sha1 |
urllib | 包含了和 URL 相关的子模块,例如:urllib.request 、urllib.parse |
itertools | 提供各种迭代器的模块,例如:itertools.cycle 、itertools.product |
functools | 函数相关工具模块,例如:functools.partial 、functools.lru_cache |
collections/heapq | 封装了常用数据结构和算法的模块,例如:collections.deque |
threading/multiprocessing | 多线程/多进程相关类和函数的模块,例如:threading.Thread |
concurrent.futures/asyncio | 并发编程/异步编程相关的类和函数的模块,例如:ThreadPoolExecutor |
base64 | 提供 BASE-64 编码相关函数的模块,例如:bas64.encode |
csv | 和读写CSV文件相关的模块,例如:csv.reader 、csv.writer |
profile/cProfile/pstats | 和代码性能剖析相关的模块,例如:cProfile.run 、pstats.Stats |
unittest | 和单元测试相关的模块,例如:unittest.TestCase |
pymysql/mysqldb/dbutil | 连接数据库 |
requests/beautifulsoup4(bs4) | 构造url请求和解析请求的 |
re 模块
在 Python 中,使用正则表达式有两种方式:
- 一种是直接调用
re
模块中的函数,传入正则表达式和需要处理的字符串。 - 一种是先通过
re
模块的compile
函数创建正则表达式对象,然后再通过对象调用方法并传入需要处理的字符串。
如果一个正则表达式被频繁使用,推荐用re.compile
函数创建正则表达式对象,这样会减少频繁编译同一个正则表达式所造成的开销。
re.match
和 re.search
区别
re.match
:尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()
就返回 none。re.search
:扫描整个字符串并返回第一个成功的匹配。
什么是正则的贪婪匹配
匹配一个字符串没有节制,能匹配多少就去匹配多少,直到没有匹配的为止。
logging
logging 模块的作用以及应用场景
logging 模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。
作用:可以了解程序运行情况,是否正常,在程序的出现故障快速定位出错地方及故障分析。
日志级别
- DEBUG:详细的信息,通常只出现在诊断问题上。
- INFO:确认一切按预期运行。
- WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作。
- ERROR:更严重的问题,软件没能执行一些功能。
- CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行。
os 和 sys 模块
os 模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。
官方解释:- os: This module provides a portable way of using operating system dependent functionality.
- 这个模块提供了一种方便的使用操作系统函数的方法。
sys 模块负责程序与 Python 解释器的交互,提供了一系列的函数和变量,用于操控 Python 的运行时环境。
官方解释:- sys: This module provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter.
- 这个模块可供访问由解释器使用或维护的变量和与解释器进行交互的函数。
os 常用方法:
1 |
|
sys 常用方法:
1 |
|
random
如何使用 random 模块生成随机数、实现随机乱序和随机抽样
1 |
|
扩展:random
模块提供的函数除了生成均匀分布的随机数外,还可以生成其他分布的随机数,例如:
1 |
|
json
json 序列化时,可以处理的数据类型有哪些,如何定制支持 datetime 类型
可序列化数据类型:字典、列表、数字、字符串、元组;如果是元组,自动转成列表(再转回去的话也是列表)
1 |
|
json序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办
1 |
|
简述 requests 模块的作用及基本使用
- 作用:使用 requests 可以模拟浏览器的请求。
- 常用参数:url、headers、cookies、data、json、params、proxy
- 常用返回值:content、iter_content、text、encoding=”utf-8”、cookie.get_dict()、json、code
简述 beautifulsoup 模块的作用及基本使用
BeautifulSoup 用于从 HTML 或 XML 文件中提取、过滤想要的数据形式。
- 常用方法:find、find_all、text、attrs、get
- 解析:
html.parser
或者lxml
(需要下载安装)
DBUtils 模块的作用
程序使用 MySQL 连接时有两种情况:
- 为每个线程创建一个连接,连接不可控,需要控制线程数。
- 创建指定数量的连接在连接池,当线程访问的时候去取,不够了线程排队,直到有连接释放(推荐)。
两种写法:
- 用静态方法装饰器,通过直接执行类的方法来连接使用数据库。
- 通过实例化对象,通过对象来调用方法执行语句。
- https://www.cnblogs.com/ArmoredTitan/p/Flask.html
简述 seleninu 模块的作用及基本使用?
Selenium 是一个用于 Web 应用程序测试的工具,他的测试直接运行在浏览器上,模拟真实用户,按照代码做出点击、输入、打开等操作。
爬虫中使用他是为了解决 requests 无法解决 javascript 动态问题。
简述 asynio 模块的作用和应用场景
asyncio 是 Python 3.4 版本引入的标准库,直接内置了对异步 IO 的支持。
asyncio 的异步操作,需要在 coroutine 中通过 yield from 完成。
简述 gevent 模块的作用和应用场景
Gevent 是一个第三方库,可以轻松通过 gevent 实现并发同步或异步编程。
在 gevent 中用到的主要模式是 Greenlet, 它是以 C 扩展模块形式接入 Python 的轻量级协程。
Greenlet 全部运行在主程序操作系统进程的内部,但它们被协作式地调度。
twisted 框架的使用和应用
Twisted 是一个事件驱动型的网络模型。
事件驱动模型编程是一种范式,这里程序的执行流由外部决定。
特点是:包含一个事件循环,当外部事件发生时,使用回调机制来触发相应的处理。