README.md 13.9 KB
Newer Older
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
1
## Python教学大纲
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
2 3 4

### Python应用领域和就业形势分析

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
5
简单的说,Python是一个“优雅”、“明确”、“简单”的编程语言。
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
6

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
7 8
 - 学习曲线低,适合非专业人士
 - 开源软件,强大的生态圈
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
9
 - 解释型语言,完美的平台可移植性
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
10 11
 - 支持面向对象和函数式编程
 - 可扩展性,能调用C/C++代码
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
 - 代码规范程度高,可读性强

目前几个比较流行的领域,Python都有用武之地。

 - 云基础设施 - Python / Java / Go
 - DevOps - Python / Shell / Ruby / Go
 - 网络爬虫 - Python / PHP / C++
 - 数据分析挖掘 - Python / R / Scala / Matlab
 - 机器学习 - Python / R / Java / Lisp

Python的就业市场分析:相同工作职位和要求,薪资普遍高3k-5k。

- Python服务器后台开发 / 游戏服务器开发 / 数据接口开发
- Python自动化运维
- Python数据分析 / 数据可视化 / 科学计算
- Python爬虫
- Python机器学习 / 聊天机器人 / 图像识别和处理

![Python开发者分区域平均薪资](./res/python-salary.png)

![北京Python开发者薪资分布](./res/python-salary-beijing.png)

![上海Python开发者薪资分布](./res/python-salary-shanghai.png)

![深圳Python开发者薪资分布](./res/python-salary-shenzhen.png)

![杭州Python开发者薪资分布](./res/python-salary-hangzhou.png)

![成都Python开发者薪资分布](./res/python-salary-chengdu.png)

![全国Python职位和招聘信息](./res/python-job-all.png)

![成都Python职位和招聘信息](./res/python-job-chengdu.png)

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
46
给初学者的几个建议(老司机的忠告):
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
47 48 49 50 51 52 53 54 55

- Make English as your working language.
- Practice makes perfect.
- All experience comes from mistakes.
- Don't be one of the leeches.
- Either stand out or kicked out.

### Python语言基础

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
56
#### Day01 - [初识Python](./Day01~Day20    [语言基础]/Day01/初识Python.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
57 58 59 60 61 62 63

- Python简介 - Python的历史 / Python的优缺点 / Python的应用领域
- 搭建编程环境 - Windows环境 / Linux环境 / MacOS环境
- 从终端运行Python程序 - DOS命令 / Hello, world / print函数 / 运行程序
- 使用IDLE - 交互式环境(REPL) / 编写多行代码 / 运行程序 / 退出IDLE
- 注释 - 注释的作用 / 单行注释 / 多行注释

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
64
#### Day02 - [语言元素](./Day01~Day20    [语言基础]/Day02/语言元素.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
65 66 67 68 69 70 71

- 程序和进制 - 指令和程序 / 冯诺依曼机 / 二进制和十进制 / 八进制和十六进制
- 变量和类型 - 变量的命名 / 变量的使用 / input函数 / 检查变量类型 / 类型转换
- 数字和字符串 - 整数 / 浮点数 / 复数 / 字符串 / 字符串基本操作 / 字符编码
- 运算符 - 数学运算符 / 赋值运算符 / 比较运算符 / 逻辑运算符 / 身份运算符 / 运算符的优先级
- 应用案例 - 华氏温度转换成摄氏温度 / 输入圆的半径计算周长和面积 / 输入年份判断是否是闰年

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
72
#### Day03 - [分支结构](./Day01~Day20    [语言基础]/Day03/分支结构.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
73 74 75 76 77

- 分支结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图
- if语句 - 简单的if / if-else结构 / if-elif-else结构 / 嵌套的if
- 应用案例 - 用户身份验证 / 英制单位与公制单位互换 / 掷骰子决定做什么 / 百分制成绩转等级制 / 分段函数求值 / 输入三条边的长度如果能构成三角形就计算周长和面积

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
78
#### Day04 - [循环结构](./Day01~Day20    [语言基础]/Day04/循环结构.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
79 80 81

- 循环结构的应用场景 - 条件 / 缩进 / 代码块 / 流程图
- while循环 - 基本结构 / break语句 / continue语句
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
82 83
- for循环 - 基本结构 / range类型 / 循环中的分支结构 / 嵌套的循环 / 提前结束程序 
- 应用案例 - 1~100求和 / 判断素数 / 猜数字游戏 / 打印九九表 / 打印三角形图案 / 猴子吃桃 / 百钱百鸡
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
84

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
85
#### Day05 - [总结和练习](./Day01~Day20    [语言基础]/Day05/练习.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
86

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
87 88
- 基础练习 - 水仙花数 / 完美数 / 五人分鱼 / Fibonacci数列 / 回文素数 
- 综合练习 - Craps赌博游戏
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
89

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
90
#### Day06 - [函数和模块的使用](./Day01~Day20    [语言基础]/Day06/函数和模块的使用.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
91

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
92 93 94 95 96 97 98 99
- 函数的作用 - 代码的坏味道 / 用函数封装功能模块
- 定义函数 - def语句 / 函数名 / 参数列表 / return语句 / 调用自定义函数
- 调用函数 - Python内置函数 /  导入模块和函数
- 函数的参数 - 默认参数 / 可变参数 / 关键字参数(\*) / 命名关键字参数(\*)
- 函数的返回值 - 没有返回值  / 返回单个值 / 返回多个值(\*)
- 作用域问题 - 局部作用域 / 嵌套作用域 / 全局作用域 / 内置作用域 / 和作用域相关的关键字
- 用模块管理函数 - 模块的概念 / 用自定义模块管理函数 / 命名冲突的时候会怎样(同一个模块和不同的模块)

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
100
> **说明**:用\*标记的内容建议放到第8天再讲,因为讲完列表、元组、字典等内容后学生才更容易理解这些特殊的用法。
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
101

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
102
#### Day07 - [字符串和常用数据结构](./Day01~Day20    [语言基础]/Day07/字符串和常用数据结构.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
103 104

- 字符串的使用 - 计算长度 / 下标运算 / 切片 / 常用方法
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
105 106 107 108 109 110 111 112
- 列表基本用法 - 定义列表 / 用下表访问元素 / 下标越界 / 添加元素 / 删除元素 / 修改元素 / 切片 / 循环遍历
- 列表常用操作 - 连接 / 复制(复制元素和复制数组) / 长度 / 排序 / 倒转 / 查找
- 生成列表 - 使用range创建数字列表 / 生成表达式 / 生成器
- 元组的使用 - 定义元组 / 使用元组中的值 / 修改元组变量 / 元组和列表转换
- 集合基本用法 - 集合和列表的区别 /  创建集合 / 添加元素 / 删除元素 /  清空
- 集合常用操作 - 交集 / 并集 / 差集 / 对称差 / 子集 / 超集
- 字典的基本用法 - 字典的特点 / 创建字典 / 添加元素 / 删除元素 / 取值 / 清空
- 字典常用操作 - keys()方法 / values()方法 / items()方法 / setdefault()方法
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
113 114
- 基础练习 - 跑马灯效果 / 列表找最大元素 / 统计考试成绩的平均分 / Fibonacci数列 / 杨辉三角
- 综合案例 - 双色球选号 / 井字棋
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
115

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
116
#### Day08 - [函数的高级用法](./Day01~Day20    [语言基础]/Day08/函数的高级用法.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
117

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
118
- 遗留问题 - 关键字参数 / 命名关键字参数 / 返回多个值​
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
119 120 121 122 123 124
- 函数的递归调用 - 递归定义 / 递归公式 / 收敛条件 / 用递归解决实际问题
- 实现常用工具函数 - 生成指定长度的验证码 / 获取文件的后缀名 / 生成随机文件名
- 高阶函数 - 函数名也是变量 / 将函数传入函数 / 利用高阶函数实现代码的解耦合 / 匿名函数(Lambda函数) / 包装器(代理模式)
- 函数返回函数 - 用函数做返回值 / 闭包 
- 偏函数和柯里化 - 偏函数的意义 / 使用partial函数创建偏函数 / 柯里化的概念

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
125
>**说明:**函数式编程相关的内容属于比较尴尬的知识点,需要做一个简要的介绍,但是对学生来说暂时是用不上这些知识的,因此不要花太多的时间去纠结这些内容,事实上Python语言对函数式编程的支持也是非常有限的,让学生知道函数可以接受函数作为参数也可以返回函数就已经很足够了,如果讲得太深大多数学生一定是懵的。
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
126

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
127
#### Day09 - [面向对象编程基础](./Day01~Day20    [语言基础]/Day09/面向对象编程基础.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
128 129 130 131 132

- 类和对象 - 什么是类 / 什么是对象 / 面向对象其他相关概念
- 定义类 - 基本结构 / 属性和方法 / 构造器 / 析构器 / \_\_str\_\_方法
- 使用对象 - 创建对象 / 给对象发消息
- 面向对象的四大支柱 - 抽象 / 封装 / 继承 / 多态
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
133 134 135 136
- 基础练习 - 定义学生类 / 定义时钟类 / 定义图形类 / 定义汽车类

> **说明:**面向对象基础部分一定要跟学生进行大量的互动,帮助学生理解类和对象的概念,面向对象编程的两步走(创建对象+发消息)和三步走模式(定义类+创建对象+发消息),可以让学生自己列举出能想到的类和对象的例子,并且在讲完本章内容将自己想到的例子变成代码。

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
137
#### Day10 - [总结和练习](./Day01~Day20    [语言基础]/Day10/练习.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
138

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
139 140
- 综合案例 -  奥特曼打小怪兽 / 扑克游戏

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
141
#### Day11 - [面向对象进阶](./Day11/面向对象进阶.md)
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
142 143 144 145 146

- 属性 - 类属性 / 实例属性 / 属性访问器 / 属性修改器 / 属性删除器 / 使用\_\_slots\_\_
- 类中的方法 - 实例方法 / 类方法 / 静态方法
- 运算符重载 - \_\_add\_\_ / \_\_sub\_\_ / \_\_or\_\_ /\_\_getitem\_\_ / \_\_setitem\_\_ / \_\_len\_\_ / \_\_repr\_\_ / \_\_gt\_\_ / \_\_lt\_\_ / \_\_le\_\_ / \_\_ge\_\_ / \_\_eq\_\_ / \_\_ne\_\_ / \_\_contains\_\_ 
- 类(的对象)之间的关系 - 关联 / 继承 / 依赖
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
147
- 继承和多态 - 什么是继承 / 继承的语法 / 调用父类方法 / 方法重写 / 类型判定 / 多重继承 / 菱形继承(钻石继承)和C3算法
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
148 149
- 综合案例 - 工资结算系统 / 图书自动折扣系统 / 自定义分数类

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
150 151
> **说明:**菱形继承和C3算法方面的内容可以根据实际授课情况进行取舍,因为与其把时间花在一些学生暂时难以理解的知识点上,还不如用这些时间让学生通过大量的练习理解面向对象的意义。

骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
#### Day12 - [文件和异常](./Day12/文件和异常.md)

- 读文件 - 读取整个文件 / 逐行读取 / 文件路径
- 写文件 - 覆盖写入 / 追加写入 / 文本文件 / 二进制文件
- 异常处理 - 异常机制的重要性 / try-except代码块 / else代码块 / finally代码块 / 内置异常类型 / 异常栈 / raise语句
- 数据持久化 - CSV文件概述 / csv模块的应用 / JSON数据格式 / json模块的应用
- 综合案例 - 歌词解析

#### Day13 - [GUI和绘图](./Day13/图形用户界面和绘图.md)

- GUI编程简介 - 窗口和控件 / 事件驱动处理 / 布局管理器
- tkinter模块 - 导入tkinter模块 / 创建顶层窗口 / 使用Tk控件 / 主消息循环 / 处理事件
- 动画和游戏 - 屏幕坐标系和颜色 / 在窗口上绘图 / 加载图像 / 动画的原理 /  使用pygame

#### Day14 - [大战外星人游戏-1](./Day14/游戏开发-1.md)

#### Day15 - [大战外星人游戏-2](./Day15/游戏开发-2.md)

> 说明:可以根据班级情况安排其他简单且有趣的小游戏(五子棋、贪吃蛇等),主要目的是通过该项目综合运用三周所学的知识以及提升学员的兴趣和积极性。如果之前的课程中尚有很多知识点学员没有掌握或者非常生疏,也可以利用这两天时间进行查漏补缺和巩固加强。

#### Day16 - [字符串和正则表达式](./Day16/字符串和正则表达式.md)

- 字符串高级操作 - 转义字符 \ 原始字符串 \ 多行字符串 \ in和 not in运算符 \ is开头的方法 \ join和split方法 \ strip相关方法 \ pyperclip模块 \ 不变字符串和可变字符串 \ StringIO的使用
- 正则表达式入门 - 正则表达式的作用 \ 元字符 \ 转义 \ 量词 \ 分组 \ 零宽断言 \贪婪匹配与惰性匹配懒惰 \ 使用re模块实现正则表达式操作(匹配、搜索、替换、捕获)
- 使用正则表达式 - re模块 \ compile函数 \ group和groups方法 \ match方法 \ search方法 \ findall和finditer方法 \ sub和subn方法 \ split方法
- 应用案例 - 使用正则表达式验证输入的字符串

#### Day17 - [进程和线程入门](./Day17/进程和线程入门.md)

- 进程和线程的概念 - 什么是进程 / 什么是线程 / 多线程的应用场景
- 使用进程 - fork函数 / multiprocessing模块 / 进程池 / 进程间通信
- 使用线程 - thread模块 / threading模块 / Thread类 / Lock类

#### Day18 - [进程和线程高级](./Day18/进程和线程高级.md)

- 使用ThreadLocal - 资源竞争 / 死锁 / 将资源绑定到线程
- 并发编程模式 - 多进程和多线程的选择 / 生产者-消费者模式 / queue模块
- 协程 - 进程/线程切换的开销 / 单线程+异步I/O工作模式 / 使用协程(微线程)
- 其他相关内容 - concurrent.futures模块 / 其他相关模块

> **说明:**本章节的内容对学生来讲没有实际应用的场景可能会比较难于理解,因此可以根据教学的实际情况调整内容或者对之前的知识点进行巩固练习或进行作业评讲。

#### Day19 - [网络编程入门](./Day19/网络编程入门.md)

- 计算机网络基础 - 计算机网络发展史 / “TCP-IP”模型 / IP地址 / 端口 / 协议 / 其他相关概念
- 网络应用架构 - “客户端-服务器”架构 / “浏览器-服务器”架构
- Python网络编程 - 套接字的概念 / socket模块 /  socket函数 / 创建TCP服务器 / 创建TCP客户端 / 创建UDP服务器 / 创建UDP客户端 / SocketServer模块

> **说明:**一定要帮助学生尤其是没有计算机网络相关知识的学生对计算机网络尤其是端系统的工作方式有一个基本的了解,能够理解网络地址、协议、端口、域名服务、防火墙、套接字等概念以及它们存在的意义,当然如果能够对TCP协议和HTTP协议做更深入一些的讲解最好,这些都会让学生在面试的时候更具竞争力,掌握一门语言和框架其实很简单,真正理解系统底层的原理并不容易但却有很重要且长远的意义。

#### Day20 - [网络应用开发](./Day20/网络应用开发.md)

- 访问网络API - 网络API概述 / 访问URL / requests模块 / 解析JSON格式数据
- 文件传输 - FTP协议 / ftplib模块 / 交互式FTP应用
- 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / poplib模块 / imaplib模块
- 短信服务 - twilio模块 / 国内的短信服务

> **说明:**本章节的授课重点不是要面面俱到把每个知识点都讲一遍,而是让学生能够用Python语言和内置模块迅速开发出一些实用的网络应用程序,让学生感受到经过一个月的学习已经能够使用这门语言做很多以前很难想象的事情。

211
### Web前端
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
212

213
### Linux基础
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
214

215
### 数据库入门
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
216

217
### Web框架之Django
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
218

219
#### Day31 - Django实战(01) - 快速上手
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
220 221 222



223
#### Day32 - Django实战(02) - 深入模型
骆昊的技术专栏's avatar
骆昊的技术专栏 已提交
224