源码
告别枯燥,60秒学会一个小例子,系统学习Python,从入门到大师。Python之路已有190个例子:
第零章:感受Python之美
第一章:Python基础
第二章:Python之坑
第三章:Python字符串和正则
第四章:Python文件
第五章:Python日期
第六章:Python利器
第七章:Python画图
第八章:Python实战
第九章:Python基础算法
第十章:Python机器学习
后续章节:
- 不断丰富原有1~7章节;
- Python基础算法;
- python 机器学习,包括机器学习的基础概念和十大核心算法以及Sklearn和Kaggle实战的小例子。
- PyQt制作GUI
- Flask前端开发
- Python数据分析:NumPy, Pandas, Matplotlib, Plotly等
感受Python之美
1 简洁之美
通过一行代码,体会Python语言简洁之美
- 一行代码交换,:
- 一行代码反转列表
- 一行代码合并两个字典
- 一行代码列表去重
- 一行代码求多个列表中的最大值
- 一行代码生成逆序序列
2 Python绘图
Python绘图方便、漂亮,画图神器pyecharts几行代码就能绘制出热力图:

炫酷的水球图:

经常使用的词云图:

3 Python动画
仅适用Python的常用绘图库:Matplotlib,就能制作出动画,辅助算法新手入门基本的排序算法。如下为一个随机序列,使用,由小到大排序的过程动画展示:

归并排序动画展示:

使用turtule绘制的漫天雪花:

4 Python数据分析
Python非常适合做数值计算、数据分析,一行代码完成数据透视:
5 Python机器学习
Python机器学习库功能强大,接口易用,包括数据预处理模块、回归、分类、聚类、降维等。一行代码创建一个KMeans聚类模型:

6 Python-GUI
PyQt设计器开发GUI,能够迅速通过拖动组建搭建出来,使用方便。如下为使用PyQt,定制的一个专属自己的小而美的计算器。
除此之外,使用Python的Flask框架搭建Web框架,也非常方便。
总之,在这个,你都能学到关于使用Python干活的方方面面的有趣的小例子,欢迎关注。
一、Python基础
主要总结Python常用内置函数;Python独有的语法特性、关键词, 等;内置数据结构包括:列表(list), 字典(dict), 集合(set), 元组(tuple) 以及相关的高级模块中的, , ,模块。目前共有个小例子
此章节一共包括基础小例子。
1 求绝对值
绝对值或复数的模
2 元素都为真
接受一个迭代器,如果迭代器的都为真,那么返回,否则返回
3 元素至少一个为真
接受一个迭代器,如果迭代器里元素为真,那么返回,否则返回
4 ascii展示对象
调用对象的__repr__() 方法,获得该方法的返回值,如下例子返回值为字符串
5 十转二
将转换为
6 十转八
将转换为
7 十转十六
将转换为
8 判断是真是假
测试一个对象是True, 还是False.
9 字符串转字节
将一个转换成类型
10 转为字符串
将、等转换为类型
11 是否可调用
判断对象是否可被调用,能被调用的对象就是一个 对象,比如函数 , 等都是可被调用的,但是例子4 中实例是不可被调用的:
如果想让能被调用 xiaoming(), 需要重写类的方法:
12 十转ASCII
查看十进制整数对应的
13 ASCII转十
查看某个对应的十进制数
14 静态方法
装饰器对应的函数不需要实例化,不需要 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。
15 执行字符串表示的代码
将字符串编译成python能识别或可执行的代码,也可以将文字读成字符串再编译。
16 创建复数
创建一个复数
17 动态删除属性
删除对象的属性
18 转为字典
创建数据字典
19 一键查看对象所有方法
不带参数时返回内的变量、方法和定义的类型列表;带参数时返回的属性,方法列表。
20 取商和余数
分别取商和余数
21 枚举对象
返回一个可以枚举的对象,该对象的next()方法将返回一个元组。
22 计算表达式
将字符串str 当成有效的表达式来求值并返回计算结果取出字符串中内容
23 查看变量所占字节数
24 过滤器
在函数中设定过滤条件,迭代元素,保留返回值为的元素:
25 转为浮点类型
将一个整数或数值型字符串转换为浮点数
如果不能转化为浮点数,则会报:
26 字符串格式化
格式化输出字符串,format(value,
format_spec)实质上是调用了value的__format__(format_spec)方法。
27 冻结集合
创建一个不可修改的集合。
因为不可修改,所以没有像那样的和方法
28 动态获取对象属性
获取对象的属性
29 对象是否有这个属性
30 返回对象的哈希值
返回对象的哈希值,值得注意的是自定义的实例都是可哈希的,, , 等可变对象都是不可哈希的(unhashable)
31 一键帮助
返回对象的帮助文档
32 对象门牌号
返回对象的内存地址
33 获取用户输入
获取用户输入内容
34 转为整型
int(x, base =10) , x可能为字符串或数值,将x 转换为一个普通整数。如果参数是字符串,那么它可能包含符号和小数点。如果超出了普通整数的表示范围,一个长整数被返回。
35 isinstance
判断_object_是否为类_classinfo_的实例,是返回true
36 父子关系鉴定
如果class是classinfo元组中某个元素的子类,也会返回True
37 创建迭代器类型
使用, 返回一个可迭代对象, sentinel可省略(一旦迭代到此元素,立即终止)
44 所有对象之根
object 是所有类的基类
45 打开文件
返回文件对象
mode取值表:
46 次幂
base为底的exp次幂,如果mod给出,取余
47 打印
48 创建属性的两种方式
返回 property 属性,典型的用法:
使用python装饰器,实现与上完全一样的效果代码:
49 创建range序列
- range(stop)
- range(start, stop[,step])
生成一个不可变序列:
50 反向迭代器
51 四舍五入
四舍五入,代表小数点后保留几位:
52 转为集合类型
返回一个set对象,集合内不允许有重复元素:
53 转为切片对象
class slice(start, stop[, step])
返回一个表示由 range(start, stop, step) 所指定索引集的 slice对象,它让代码可读性、可维护性变好。
54 拿来就用的排序函数
排序:
55 求和函数
求和:
56 转元组
将对象转为一个不可变的序列类型
57 查看对象类型
class (name, bases, dict)
传入一个参数时,返回 object 的类型:
58 聚合迭代器
创建一个聚合了来自每个可迭代对象中的元素的迭代器:
59 nonlocal用于内嵌函数中
关键词常用于函数嵌套中,声明变量为非局部变量; 如果不声明,表明为函数内的局部变量,因为在引用(reference)时,i未被声明,所以会报的错误。
60 global 声明全局变量
先回答为什么要有,一个变量被多个函数引用,想让全局变量被所有函数共享。有的伙伴可能会想这还不简单,这样写:
f和g两个函数都能共享变量,程序没有报错,所以他们依然不明白为什么要用.
但是,如果我想要有个函数对递增,这样:
此时执行程序,bang, 出错了! 抛出异常:,原来编译器在解释时会把解析为函数内的局部变量,很显然在此函数内,编译器找不到对变量的定义,所以会报错。
就是为解决此问题而被提出,在函数h内,显示地告诉编译器为全局变量,然后编译器会在函数外面寻找的定义,执行完后,还为全局变量,值加1:
61 链式比较
62 不用else和if实现计算器
63 链式操作
64 交换两元素
65 去最求平均
66 打印99乘法表
打印出如下格式的乘法表
一共有10 行,第行的第列等于:,
其中,
取值范围:
取值范围:
根据的语言描述,转化为如下代码:
67 全展开
对于如下数组:
如何完全展开成一维的。这个小例子实现的是递归版,两个参数分别表示带展开的数组,输出数组。
调用:
numpy里的与上面的函数实现有些微妙的不同:
68 列表等分
69 列表压缩
70 更长列表
71 求众数
72 多表之最
73 列表查重
74 列表反转
75 浮点数等差数列
76 按条件分组
77 map实现向量运算
78 值最大的字典
79 合并两个字典
80 topn字典
81 异位词
82 逻辑上合并字典
(1) 两种合并字典方法 这是一般的字典合并写法
修改merged[‘x’]=10,dic1中的x值,是重新生成的一个。
但是,却不同,它在内部创建了一个容纳这些字典的列表。因此使用ChainMap合并字典,修改merged[‘x’]=10后,dic1中的x值,如下所示:
83 命名元组提高可读性
使用命名元组写出来的代码可读性更好,尤其处理上百上千个属性时作用更加凸显。
84 样本抽样
使用抽样,如下例子从100个样本中随机抽样10个。
85 重洗数据集
使用用来重洗数据集,值得注意是对lst就地(in place)洗牌,节省存储空间
86 10个均匀分布的坐标点
random模块中的生成[a,b)内的一个随机数,如下生成10个均匀分布的二维坐标点
87 10个高斯分布的坐标点
random模块中的生成均值为u, 标准差为sigma的满足高斯分布的值,如下生成10个二维坐标点,样本误差(y-2*x-1)满足均值为0,标准差为1的高斯分布:
88 chain高效串联多个容器对象
函数串联a和b,兼顾内存效率同时写法更加优雅。
89 操作函数对象
创建函数对象的list,根据想要调用的index,方便统一调用。
90 生成逆序序列
第三个参数为负时,表示从第一个参数开始递减,终止到第二个参数(不包括此边界)
二 Python之坑
1 含单个元素的元组
Python中有些函数的参数类型为元组,其内有1个元素,这样创建是错误的:
它实际创建一个整型元素5,必须要在元素后加一个:
2 默认参数设为空
含有默认参数的函数,如果类型为容器,且设置为空:
这是可变类型的默认参数之坑,请务必设置此类默认参数为None:
3 共享变量未绑定之坑
有时想要多个函数共享一个全局变量,但却在某个函数内试图修改它为局部变量:
应该在f函数内显示声明为global变量:
4 lambda自由参数之坑
排序和分组的key函数常使用lambda,表达更加简洁,但是有个坑新手容易掉进去:
但是实际却输出: 3,3,3. 定义lambda使用的被称为自由参数,它只在调用lambda函数时,值才被真正确定下来,这就犹如下面打印出2,你肯定确信无疑吧。
python案例正确做法是转化为lambda函数的:
5 分不清是默认参数还是关键字参数
定义函数f,在使用它时,width的以下三种写法都是OK的,如果未了解函数原型,容易分不清width到底是位置参数还是关键字参数。
width是带默认参数的位置参数,关键字参数必须使用两个星号声明。因此如果要区分它们,需要关注函数的定义。
6 列表删除之坑
删除一个列表中的元素,此元素可能在列表中重复多次:
考虑删除这个序列[1,3,3,3,5]中的元素3,结果发现只删除其中两个:
正确做法:
7 列表快速复制之坑
在python中与列表操作,实现快速元素复制:
如果列表元素为列表或字典等复合类型:
结果可能出乎你的意料,其他等也被修改为10
这是因为*复制的复合对象都是浅引用,也就是说id(a[0])与id(a[2])门牌号是相等的。如果想要实现深复制效果,这么做:
8 字符串驻留
如果上面例子返回,但是下面例子为什么是:
这与Cpython 编译优化相关,行为称为,但驻留的字符串中只包含字母,数字或下划线。
9 相同值的不可变对象
这是因为具有相同值的不可变对象在Python中始终具有
由于存在,不同值的对象也可能具有相同的哈希值。
10 对象销毁顺序
创建一个类:
创建两个SE实例,使用判断:
创建两个SE实例,使用判断:
调用函数, Python 创建一个 SE 类的实例,并使用函数获得内存地址后,销毁内存丢弃这个对象。
当连续两次进行此操作, Python会将相同的内存地址分配给第二个对象,所以两个对象的id值是相同的.
但是is行为却与之不同,通过打印顺序就可以看到。
11 充分认识for
为什么不是执行一次就退出?
按照for在Python中的工作方式, i = 10 并不会影响循环。range(5)生成的下一个元素就被解包,并赋值给目标列表的变量.
12 认识执行时机
为生成器,list(g)后返回,因为每个元素肯定至少都出现一次。所以这个结果这不足为奇。但是,请看下例:
请问,list(g)等于多少?这不是和上面那个例子结果一样吗,结果也是,但是:
这有些不可思议~~ 原因在于:
生成器表达式中, in 子句在声明时执行, 而条件子句则是在运行时执行。
所以代码:
等价于:
正在陆续汇总更多Python使用之坑 …
三、Python字符串和正则
字符串无所不在,字符串的处理也是最常见的操作。本章节将总结和字符串处理相关的一切操作。主要包括基本的字符串操作;高级字符串操作之正则。目前共有个小例子
1 反转字符串
2 字符串切片操作
3 join串联字符串
4 字符串的字节长度
以下是正则部分
1 查找第一个匹配串
2 查找所有1的索引
3 d 匹配数字[0-9]
findall找出全部位置的所有匹配
4 匹配浮点数
?表示前一个字符匹配0或1次
5 ^匹配字符串的开头
6 re.I 忽略大小写
7 理解compile的作用
如果要做很多次匹配,可以先编译匹配串:
8 使用()捕获单词,不想带空格
使用捕获
看到提取单词中未包括第一个单词,使用表示前面字符出现0次或1次,但是此字符还有表示贪心或非贪心匹配含义,使用时要谨慎。
9 split分割单词
使用以上方法分割单词不是简洁的,仅仅是为了演示。分割单词最简单还是使用函数。
10 match从字符串开始位置匹配
注意,等的不同:
- match函数
- search函数 search是从字符串的任意位置开始匹配
11 替换匹配的子串
函数实现对匹配子串的替换
12 贪心捕获
(.*)表示捕获任意多个字符,尽可能多的匹配字符
13 非贪心捕获
仅添加一个问号(),得到结果完全不同,这是非贪心匹配,通过这个例子体会贪心和非贪心的匹配的不同。
非贪心捕获,见好就收。
14 常用元字符总结
15 常用通用字符总结
14 密码安全检查
密码安全要求:1)要求密码为6到20位; 2)密码只包含英文字母和数字
选用最保险的方法,查看是否整个字符串都匹配:
15 爬取百度首页标题
16 批量转化为驼峰格式(Camel)
数据库字段名批量转化为驼峰格式
分析过程
整理以上分析得到如下代码:
测试结果:
四、Python文件
1 获取后缀名
2 文件读操作
3 文件写操作
4 路径中的文件名
5 批量修改文件后缀
批量修改文件后缀
本例子使用Python的模块和 模块,将工作目录下所有后缀名为的文件修改为后缀名为
通过本例子,大家将会大概清楚模块的主要用法。
导入模块
定义脚本参数
后缀名批量修改
实现Main
6 xls批量转换成xlsx
7 定制文件不同行
比较两个文件在哪些行内容不同,返回这些行的编号,行号编号从1开始。
定义统计文件行数的函数
统计文件不同之处的子函数:
主函数:
比较两个文件A和B,拿相对较短的文件去比较,过滤行后的换行符和空格。
暂未考虑某个文件最后可能有的多行空行等特殊情况
使用 函数:
关于文件比较的,实际上,在Python中有对应模块 , 提供更多其他格式的文件更详细的比较,大家可参考:
docs.python.org/3/library/d…
8 获取指定后缀名的文件
9 批量获取文件修改时间
10 批量压缩文件
11 32位加密
五、Python日期
Python日期章节,由表示大日期的, 模块,逐渐过渡到表示时间刻度更小的模块:, 模块,按照此逻辑展开,总结了最常用的个关于时间处理模块的例子。
1 年的日历图
打印结果:
2 判断是否为闰年
打印结果:
3 月的日历图
打印结果:
4 月有几天
打印结果:
5 月第一天
打印结果:
6 月最后一天
打印结果:
7 获取当前时间
8 字符时间转时间
9 时间转字符时间
六、Python利器
Python中的三大利器包括:,,,利用好它们才能开发出最高性能的Python程序,涉及到的内置模块 提供迭代器相关的操作。此部分收录有意思的例子共计例。
1 寻找第n次出现位置
2 斐波那契数列前n项
3 找出所有重复元素
4 联合统计次数
Counter对象间可以做数学运算
5 groupby单字段分组
天气记录:
按照天气字段分组汇总:
输出结果看出,分组失败!原因:分组前必须按照分组字段,这个很坑~
修改代码:
输出结果:
6 itemgetter和key函数
注意到和所用的函数,除了写法外,还有一种简写,就是使用:
结果:
7 groupby多字段分组
是一个类,返回一个可调用的对象,它的参数可有多个:
结果如下,使用和两个字段排序,
注意这个结果与上面结果有些微妙不同,这个更多是我们想看到和使用更多的。
8 sum函数计算和聚合同时做
Python中的聚合类函数,,第一个参数是类型,一般使用方法如下:
使用列表生成式创建一个长度与一行的临时列表,这步完成后,再做聚合。
试想如果你的数组长度十百万级,再创建一个这样的临时列表就很不划算,最好是一边算一边聚合,稍改动为如下:
此时是的简写,得到一个生成器()对象,如下所示:
生成器每迭代一步吐出()一个元素并计算和聚合后,进入下一次迭代,直到终点。
9 list分组(生成器版)
10 列表全展开(生成器版)
11 测试函数运行时间的装饰器
12 统计异常出现次数和时间的装饰器
写一个装饰器,统计某个异常重复出现指定次数时,经历的时长。
关键词常用于函数嵌套中,声明变量i为非局部变量;
如果不声明,表明为函数内的局部变量,因为在引用(reference)时,未被声明,所以会报的错误。
使用创建的装饰函数, 是异常出现的次数。
共测试了两类常见的异常:和。
打印出来的结果如下:
13 定制递减迭代器
核心要点:
1 名字不能变,实现定制的迭代逻辑
2 :通过 raise 中断程序,必须这样写
14 测试运行时长的装饰器
七、Python画图
Python常用的绘图工具包括:, , 等,以及一些其他专用于绘制某类图如词云图等的包,描绘绘图轨迹的包等。本章节将会使用一些例子由易到难的阐述绘图的经典小例子,目前共收录个。
1 turtle绘制奥运五环图
turtle绘图的函数非常好用,基本看到函数名字,就能知道它的含义,下面使用turtle,仅用15行代码来绘制奥运五环图。
1 导入库
2 定义画圆函数
3 画笔基本设置
4 绘制五环图
调用画圆函数
结果:
[图片上传失败…(image-7c479f-1577689175382)]
2 turtle绘制漫天雪花
导入模块
导入 库和 python的
绘制雪花
绘制地面
主函数
动态图结果展示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Odd88bBd-1637763621347)(https://juejin.cn/img/turtlesnow.gif)]
3 wordcloud词云图
[图片上传失败…(image-78330d-1577689175382)]
4 plotly画柱状图和折线图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW5yW2ts-1637763621349)(https://juejin.cn/img/plotly1.png)]
5 seaborn热力图

6 matplotlib折线图
模块名称:example_utils.py,里面包括三个函数,各自功能如下:

7 matplotlib散点图

对应代码:
8 matplotlib柱状图

对应代码:
9 matplotlib等高线图

对应代码:
10 imshow图

对应代码:
11 pyecharts绘制仪表盘
使用pip install pyecharts 安装,版本为 v1.6,pyecharts绘制仪表盘,只需要几行代码:
仪表盘中共展示三项,每项的比例为30%,70%,90%,如下图默认名称显示第一项:Python机器学习,完成比例为30%

12 pyecharts漏斗图
以7种车型及某个属性值绘制的漏斗图,属性值大越靠近漏斗的大端。

13 pyecharts日历图
绘制2019年1月1日到12月27日的步行数,官方给出的图形宽度不够,只能显示到9月份,本例使用做出微调,并且显示所有步数,每隔一天显示一次:

14 pyecharts绘制graph图
构建图,其中客户点1与其他两个客户都没有关系(),也就是不存在有效边:

15 pyecharts水球图
水球图的取值表示下图中的,一般代表三个百分比:

16 pyecharts饼图

17 pyecharts极坐标图
极坐标表示为,如(6,94)表示夹角为6,半径94的点:

18 pyecharts词云图
表示在本次统计中C语言出现65次

19 pyecharts系列柱状图

20 pyecharts热力图
热力图描述的实际是三维关系,x轴表示车型,y轴表示国家,每个色块的颜色值代表销量,颜色刻度尺显示在左下角,颜色越红表示销量越大。

八、Python实战
1 环境搭建
区分几个小白容易混淆的概念:pycharm,python解释器,conda安装,pip安装,总结来说:
- 是python开发的集成开发环境(Integrated Development Environment,简称IDE),它本身无法执行Python代码
- 才是真正执行代码的工具,pycharm里可设置Python解释器,一般去python官网下载python3.7或python3.8版本;如果安装过,它里面必然也包括一个某版本的Python解释器;pycharm配置python解释器选择哪一个都可以。
- anaconda是python常用包的合集,并提供给我们使用命令非常方便的安装各种Python包。
- :我们安装过anaconda软件后,就能够使用conda命令下载anaconda源里(比如中科大镜像源)的包
- :类似于conda安装的python安装包的方法
修改镜像源
在使用安装 安装某些包会出现慢或安装失败问题,最有效方法是修改镜像源为国内镜像源。之前都选用清华镜像源,但是2019年后已停止服务。推荐选用中科大镜像源。
先查看已经安装过的镜像源,cmd窗口执行命令:
查看配置项,如果显示带有,则说明已安装过清华镜像。
下一步,使用删除清华镜像,如下命令删除第一个。然后,依次删除所有镜像源
添加目前可用的中科大镜像源:
并设置搜索时显示通道地址:
确认是否安装镜像源成功,执行,找到值为如下:
Done~
2 自动群发邮件
Python自动群发邮件
注意: 发送邮箱是qq邮箱,所以要在qq邮箱中设置开启SMTP服务,设置完成时会生成一个授权码,将这个授权码赋值给文中的变量。
发送后的截图:

3 二分搜索
二分搜索是程序员必备的算法,无论什么场合,都要非常熟练地写出来。
小例子描述: 在有序数组中,指定区间范围内,查找元素 如果不存在,返回
二分搜索实现的主逻辑
在交互界面中,调用的小Demo:
4 爬取天气数据并解析温度值
爬取天气数据并解析温度值
素材来自朋友袁绍,感谢!
爬取的html 结构

通过lxml模块提取值
lxml比beautifulsoup解析在某些场合更高效
结果:
构造DataFrame对象
正则解析温度值
详细说明子字符创捕获
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用表示的就是要提取的分组(group)。比如:分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码
如果正则表达式中定义了组,就可以在对象上用方法提取出子串来。
注意到永远是原始字符串,、……表示第1、2、……个子串。
最终结果

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、清华编程大佬出品《漫画看学Python》
用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

配套600集视频:

六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

