# Python 学习路线 by 程序员鱼皮

本文作者:程序员鱼皮 (opens new window)

本站地址:https://codefather.cn (opens new window)

在看路线前,建议大家先通过以下视频了解几个问题:

  • Python 为什么这么火?
  • 为什么都在说学 Python 找不到工作?Python 真香么?
  • 我要学 Python 么?
  • 怎么快速学习?

视频地址:https://www.bilibili.com/video/BV133411C7u5/ (opens new window)

# Python 为什么火了?

有很多原因,列举几点:

  1. 语法简单易学,其他语言 5 行代码才能实现的东西,Python 一行搞定!可以少写很多代码,因此不少同学拿 Python 刷算法题(但注意要理解算法本身哦)。
  2. 类库生态丰富,想做什么功能基本都有现成的代码,拿来直接用就行,无比方便!
  3. 免费开源,感兴趣、有能力的同学可以自己去研究源码。
  4. 其他特性,比如跨平台、可扩展等。
  5. 作为数据科学、人工智能的首选语言,踩到了时代的风口。

于是乎,Python 被推向了神坛,甚至在 2021 年 10 月的编程语言排行榜中,Python 登上了第一位!

但就是这样一门 “永远的神” 的编程语言,却在网上被口口相传说:学了 Python 找不到工作!

哎,为啥呢?

# 为什么 Python 不适合找工作?

一方面是,大多数的企业,都不用 Python 来开发应用。

因为 Python 的运行速度太慢了,别说跟底层的 C++ 比了,Java 都能甩它几条街!而且这和语言本身的设计实现有关,所以哪怕你再出什么技术去优化它的性能,也终究有个瓶颈,世界上最好的语言 PHP 也是一样。

而对企业来说,性能 会直接影响用户体验和机器成本,尤其是在这个信息爆炸、大家都在追求性能的时代,Python 在应用开发领域的地位就很尴尬,而开发岗又正好是程序员中占比极高的岗位。

另一方面,虽然 Python 的应用场景很多、相关岗位也不少,又是什么 AI、数据科学的主流语言是吧,未来很美好。但是,这些前沿技术的难点并不是 Python 语言的代码本身,而是算法和思想。Python 只是一个调包、把你思想表达出来的工具而已。所以这些前沿岗位的门槛远比你入门 Python、或者听培训机构画饼时要高的多,算法岗位、大厂的产品岗真就是神仙打架,而且研究生居多。

# 学习目标

既然这样,那我还要不要学 Python 呢?

我认为:必须要学!

但是,一定要先思考自己的学习目标,目标不同,对 Python 的学习态度和投入的时间也不同。

如果想找开发岗位的工作,像上面说的,不建议把 Python 作为你的主语言,而是把它当做你的副武器。只需简单学学 Python 基础,就可以编写 Python 脚本来自动化办公、提高工作效率、做一些小工具了,性价比很高。

如果说编程语言是工具,那 Python 是对这句话的完美诠释。 多会用一个神器,谁不爱呢?

如果你想找其他岗位的工作,比如运维、测试、数据分析、产品经理、大数据、爬虫、人工智能、图像处理、多媒体处理、算法研究,当然也可以,只是如果以这些岗位为目标,除了要打好 Python 基础外,更重要的是理解对应领域的思想、方法和实践,而不是只会引库调包。

如果你是初学编程或者出于好奇学编程,我也建议你学 Python,好玩、能学下去、能培养兴趣,这些对初学者非常重要,有了兴趣之后,再学别的语言就会如鱼得水。

# 学习建议

对于初学者和非 Python 岗位的从业者,就把 Python 当工具学,了解下基础语法和常用类库,需要写 Python 脚本时,能利用搜索引擎和文档写出(或者复制)代码就行。只要你学过其他编程语言,上手 Python 真的都很容易,3 - 7 天就能学会。

建议学习时多写些小例子,比如 Python 处理表格、Python 处理 PDF 等,感受 Python 类库的强大就完事儿~

# 学习路线大纲

折叠了一部分,还是老长,思维导图获取见文末

# 学习路线

# 基础

  • Python 安装
  • 开发工具
    • PyCharm
    • Sublime
    • VS Code
  • 变量
    • 定义变量
    • 关键字
    • 命名规则
    • 基本数据类型
    • 类型转换
  • 运算符和表达式
  • 流程控制
    • 条件分支
    • 循环
  • 基本数据结构
    • 字符串
    • 列表
    • 元组
    • 集合
    • 字典
  • 函数
    • 定义
    • 参数传递
    • 作用域
    • lambda 表达式
    • 常用内置函数
  • ⭐ 面向对象编程
    • 类和对象
    • 三大特性
      • 封装
        • self
        • 属性
        • 方法
          • 类方法
          • 实例方法
          • 静态方法
        • 访问控制
      • 继承
        • 单继承
        • 多继承
      • 多态
        • 方法重写
    • 运算符重载
    • 装饰器
    • 反射
  • 模块
    • 导入模块
    • 常用模块
      • 文件处理
      • 日期时间
    • 导入包
    • 生成包
  • 异常处理
    • 捕获异常
    • try ... else ... finally 结构
    • 自定义异常
  • 文件操作
    • 文件开闭
    • 文件读写

# 进阶

  • 函数进阶
    • 闭包
    • 匿名函数
    • 生成器函数
    • 装饰器
    • 高阶函数
  • 正则表达式
  • 数据库编程
    • 数据库基础
    • SQL 编写
    • 查询
      • 聚合
      • 分组
      • 关联
      • 排序
    • 事务
    • 数据库设计
    • 数据库调优
  • 并发编程
    • 同步和异步
    • 阻塞和非阻塞
    • 多线程
    • 多进程
    • 协程
    • 并发类库
  • 网络编程
    • 网络基础(七层模型、IP)
    • 网络协议(TCP、UDP、HTTP、HTTPS、FTP、DNS)
    • WebSocket

# web 开发

  • Django 框架
    • 安装与 Demo
    • MVT 分层
    • 模型
      • 数据库基础
      • ORM
        • 单表查询
        • 多表查询
        • 聚合查询
    • 视图
    • 模板
      • 模板语法
      • 静态资源
    • 路由
    • Django Admin 管理工具
    • 测试
    • 会话
    • 鉴权
    • 文件上传
    • 中间件
    • 高级特性
      • 分页
      • 缓存
        • 本地缓存
        • Redis 分布式缓存
      • 序列化
      • 信号
      • celery 任务调度
    • Restful API 开发
      • 概念
      • 数据序列化
      • Django Rest Framework
    • 部署
    • 项目实战
  • 前端基础
    • HTML
    • CSS
    • JavaScript
  • Flask 框架

# 爬虫

  • 概念
  • 合法性
  • 数据抓取
    • 常用网络协议(http / https)概念
    • 请求
      • 请求头
      • 请求参数
      • 请求类型
    • 响应
      • 响应头
      • 响应参数
    • requests 模块
    • urllib 模块
    • 模拟登陆
    • 静态 / 动态网站抓取
    • 无头浏览器
      • selenium
      • puppeteer
  • 数据解析
    • 常用标签
    • BeautifulSoup
    • 正则表达式
    • xpath
  • 数据导出
    • 文件
      • Excel
      • CSV
    • 数据库
      • MongoDB
      • MySQL
    • 中间件
      • Redis
  • Scrapy 框架
    • 核心概念
      • 命令行工具
      • Spiders
      • Selectors
      • Items
      • Item Loaders
      • 管道
      • Scrapy Shell
      • Link Extractors
    • 调度器
    • 分布式爬虫
    • 部署
  • 并发异步爬虫
    • aioHttp
    • asyncio
  • 高级
    • IP 代理
    • 验证码识别
    • APP 抓取
    • 增量式爬虫
  • 项目实战
  • 反爬虫
    • 请求头限制
    • 验证码
    • 黑白名单
    • 封禁 IP
    • 数据加密
    • 数据混淆
    • 行为分析

# 自动化运维

  • Linux 环境
  • Shell 脚本编写
  • 脚本管理
  • 脚本发布
  • Python 运维库
  • 常用运维工具

# 数据分析(数据科学)

  • 环境搭建
    • Anaconda
    • Conda
    • Miniconda
    • Jupyter Notebook
  • 常用数据结构
  • 常用类库
    • Numpy
      • 数组
      • 索引
      • 切片
      • 多维数组
      • 函数
    • Pandas
      • Series
      • DataFrame
      • 索引
      • 对齐
      • 函数
      • 统计
  • 数据处理
    • 数据清洗
    • 层次化索引
    • 数据连接
    • 数据合并
    • 分组聚合
    • 轴向旋转
  • 数据可视化
    • matplotlib
    • seaborn
    • pyechart

# 算法(人工智能)

鱼皮自己没怎么接触人工智能,结合网上很多大神的资料整理而成,也有一定参考意义。

  • 数学基础
    • 高等数学
    • 线性代数
    • 概率论
    • 统计分析
  • 机器学习
    • 特征工程
    • 模型
      • 模型分类
      • 模型评估
      • 模型训练
      • 模型调优
    • 常用算法
      • 监督与无监督学习
      • 回归(有监督)
        • 线性回归
        • 决策树
        • 集成算法
      • 分类(有监督)
        • 逻辑回归
        • 决策树
        • 支持向量机
        • 集成算法
        • 贝叶斯算法
      • 聚类(无监督)
        • k-means
        • dbscan
      • 降维
        • 主成分分析
        • 线性判别分析
      • 进阶
        • GBDT 提升算法
        • lightgbm
        • EM 算法
        • 隐马尔科夫模型
    • 多因子模型
    • 常用库
      • Scikit-learn
    • 量化交易策略
  • 深度学习
    • 数据预处理
    • 算法
      • 神经网络
      • 卷积神经网络
      • 递归神经网络
      • 对抗生成网络
      • 序列网络模型
    • 常用算法
    • 框架和平台
      • Tenserflow2
      • Pytorch
      • Keras
      • Caffe
  • 自然语言处理
  • 图像处理
  • 计算机视觉

# 常用类库

Python 能被广泛应用,很大程度上是因为其丰富的类库,就是他人提前写好并封装的代码。基本你要做什么东西都能找到对应的类库,直接看文档用就行了,大大提高开发效率!

开源项目 awesome-python-cn(地址:https://github.com/jobbole/awesome-python-cn) 和 awesome-python(地址:https://github.com/vinta/awesome-python)已经帮大家整理了各方向的 Python 类库,数量非常多。鱼皮在此基础上筛选了一些相对优质的库,分享给大家。

# 通用

# 日期处理

  • delorean:日期处理库
  • pendulum:日期时间操作库
  • dateutil:对标准 datetime 模块的强大扩展

# 终端优化

  • IPython:功能丰富的交互式 Python 解析器
  • Jupyter Notebook:基于网页的用于交互计算的应用程序
  • Prettytable:生成美观的 ASCII 格式的表格
  • Colorama:让终端具有颜色
  • bashplotlib:在终端中进行基本绘图
  • emoji:支持在 Python 终端输出表情
  • Ipyvolume:在 Jupyter notebook 中可视化 3d 体积和字形

# 文本处理

  • FlashText:高效的文本查找替换库
  • furl:url 处理库
  • pypinyin:汉字拼音转换工具
  • simplejson:JSON 编 / 解码器
  • JMESPath:JSON 查询语法库

# 其他

  • Pipenv:Python 官方推荐的新一代包管理工具
  • threading:自带的线程库
  • multiprocessing:自带的多线程库
  • Chardet:字符编码检测器
  • logging:日志功能
  • PySnooper:Python 调试工具
  • sphinx:Python 文档生成器
  • pyttsx3:文字转语音库
  • PyWin32:提供和 windows 的交互
  • shortuuid:生成唯一 uuid 的库
  • more-itertools:支持迭代操作对象
  • cryptography:密码学工具包

# 网络请求 & 解析

  • requests:HTTP 请求库
  • aiohttp:异步 HTTP 网络库
  • scrapy:分布式网页采集框架
  • pyspider:一个强大的爬虫系统
  • BeautifulSoup:从 HTML 或 XML 文件中提取数据的库
  • you-get:网页视频下载器
  • wget:网页文件下载
  • musicdl:Python 音乐下载器

# 文件处理

  • openpyxl:Excel 读写库
  • tablib:处理表格数据
  • csvkit:用于转换和操作 CSV 的工具
  • XlsxWriter:操作 Excel
  • python-docx:操作 office word 文档
  • PyPDF2:操作 PDF 文档
  • pdfminer:从 PDF 文档中抽取信息的工具
  • xhtml2pdf:HTML 转 PDF 工具
  • WeasyPrint:可视化网页,并支持导出为 PDF
  • html2text:将 HTML 转换为 Markdown 文档
  • xmltodict:像处理 JSON 一样处理 XML
  • moviepy:基于脚本的视频编辑模块
  • eyeD3:操作音频文件的工具
  • pyAudioAnalysis:音频特征提取分析

# 界面开发

  • pyQT:跨平台的用户界面开发框架
  • Turtle:交互式绘画库
  • pyglet:跨平台界面及多媒体框架
  • wxPython:Python 用户界面开发工具
  • Pygame:一组用来开发游戏的 Python 模块
  • Manim:Python 数学动画引擎
  • progressbar:一个滚动条函数库
  • progress:进度条输出
  • tqdm:快速、可扩展的进度条

# 测试

  • nose:测试框架
  • faker:生成假数据
  • PyAutoGUI:跨平台 GUI 自动测试模块
  • coverage:代码覆盖率测量
  • sqlmap:自动 SQL 注入和渗透测试工具

# Web 开发

  • Django:Python 界最流行的 web 框架
  • Django REST framework:用于开发 web api 的框架
  • FastAPI:快速构建 web 应用程序
  • flask:Python 微型框架
  • Twisted:一个事件驱动的网络引擎

# 运维

  • psutil:跨平台的进程和系统工具模块
  • supervisor:进程控制管理系统
  • sh:让 Python 支持 shell 脚本
  • dnspython:DNS 工具包
  • scapy:数据包处理库
  • pexpect:在伪终端中控制交互程序
  • paramiko:远程连接服务
  • Ansible:IT 自动化平台
  • SaltStack:基础设施自动化和管理系统
  • watchdog:管理文件系统事件的 API 和 shell 工具

# 图像处理 & 计算机视觉

  • Pillow:图像处理库
  • kornia:计算机视觉库
  • Opencv:开源计算机视觉库
  • Mahotas:计算机视觉和图像处理库
  • Luminoth:计算机视觉的深度学习工具集

# 数据分析 & 数据科学

  • NumPy:数值计算工具包
  • Pandas:主流的数据分析工具
  • pyecharts:基于百度 Echarts 的数据可视化库
  • Dash:快速构建 Web 数据可视化应用
  • matplotlib:Python 2D 绘图库
  • Seaborn:使用 Matplotlib 进行统计数据可视化
  • python-recsys:实现推荐系统的库
  • vaex:高速大数据处理库
  • SciPy:算法和数学工具库
  • blaze:NumPy 和 Pandas 的大数据接口
  • statsmodels:统计建模和计量经济学

# 人工智能

  • Tensorflow:谷歌开源的最受欢迎的深度学习框架
  • keras:深度学习封装库,快速上手神经网络
  • Pytorch:具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架
  • Caffe2:一个轻量、模块化、可扩展的深度学习框架
  • scikit-learn:基于 SciPy 构建的机器学习 Python 模块
  • PyMC:马尔科夫链蒙特卡洛采样工具
  • mmdetection:深度学习目标检测工具箱
  • imbalanced-learn:不平衡学习工具包
  • XGBoost:分布式梯度增强库
  • Gym:强化学习算法的工具包

# 自然语言处理

  • NLTK:自然语言处理工具包
  • Gensim:话题建模库
  • Pattern:自然语言处理工具
  • fuzzywuzzy:用于字符串模糊匹配、令牌匹配等
  • TextBlob:为进行普通自然语言处理任务提供一致的 API
  • PyFlux:时间序列处理库
  • jieba:中文分词工具

# 大纲

(大纲图)

# 岗位

  • 腾讯校招 Python 相关岗位:https://join.qq.com/post.html?keyword=python (opens new window)
  • 岗位薪资查询:OfferShow 小程序
  • 运维工程师
  • Web 开发工程师(后端、全栈为主)
  • 测试工程师
  • 数据分析师
  • 产品经理
  • 算法工程师
    • 机器学习
    • 计算机视觉
    • NLP
    • 多媒体处理
  • 大数据工程师
    • 大数据开发
    • 数据挖掘
  • 网络爬虫工程师
  • 技术研究员

# 资源

# 视频

# 零基础

  • ⭐ 千锋教育 700 集零基础 Python 教程:https://www.bilibili.com/video/BV1R7411F7JV(非常全面,基础、web 开发、爬虫、数据分析、AI 基础都讲了,例子也很丰富)
  • ⭐ 黑马程序员600集 Python 教程:https://www.bilibili.com/video/BV1ex411x7Em(比较全面,基于 Linux 环境学习,以 Python 基础 + 面向对象为重点,还包含一部分游戏开发)
  • ⭐ Python 全栈开发教程:https://www.bilibili.com/video/BV1wD4y1o7AS(很纯粹的 Python 基础教程,案例多,适合快速入门)
  • 小甲鱼 -《零基础入门学习Python》最新版:https://www.bilibili.com/video/av52080698(可惜,更新到一半就没了。。)
  • 【麻省理工学院-中文字幕版】Python 和计算机科学导论公开课:https://www.bilibili.com/video/BV1ty4y1x7xP(适合外语不错的同学课外看,感受国外教学氛围)
  • 阿里云 python 工程师学习:https://developer.aliyun.com/graph/python(有在线编程体验)
  • 鱼皮公众号【程序员鱼皮】后台回复 Python,也有一套视频课

# 其他

# 书籍

# 文档

# 实战

# 代码

# 合集

# 社区

# 工具

# 面试题

# 其他

编程导航   |