diff --git "a/Python\344\271\213\350\267\257V1.2.378.pdf" "b/Python\344\271\213\350\267\257V1.2.378.pdf" new file mode 100644 index 00000000..d4996d68 Binary files /dev/null and "b/Python\344\271\213\350\267\257V1.2.378.pdf" differ diff --git a/README.md b/README.md index bf1b7cd5..1324b7ed 100644 --- a/README.md +++ b/README.md @@ -137,9 +137,7 @@ PyQt设计器开发GUI,能够迅速通过拖动组建搭建出来,使用方 ### 一、Python基础 -`Python基础`主要总结Python常用内置函数;Python独有的语法特性、关键词`nonlocal`, ` global`等;内置数据结构包括:列表(list), 字典(dict), 集合(set), 元组(tuple) 以及相关的高级模块`collections`中的`Counter`, `namedtuple`, `defaultdict`,`heapq`模块。目前共有`82`个小例子 - -此章节一共包括`82个`基础小例子。 +`Python基础`主要总结Python常用内置函数;Python独有的语法特性、关键词`nonlocal`, ` global`等;内置数据结构包括:列表(list), 字典(dict), 集合(set), 元组(tuple) 以及相关的高级模块`collections`中的`Counter`, `namedtuple`, `defaultdict`,`heapq`模块。目前共有`86`个小例子。 #### 1 求绝对值 @@ -728,7 +726,7 @@ __iter__ is called!! 5 ``` -#### 44 所有对象之根 +#### 38 所有对象之根 object 是所有类的基类 @@ -739,7 +737,7 @@ In [2]: type(o) Out[2]: object ``` -#### 45 打开文件 +#### 39 打开文件 返回文件对象 @@ -762,7 +760,7 @@ mode取值表: | `'t'` | 文本模式(默认) | | `'+'` | 打开用于更新(读取与写入) | -#### 46 次幂 +#### 40 次幂 base为底的exp次幂,如果mod给出,取余 @@ -771,7 +769,7 @@ In [1]: pow(3, 2, 4) Out[1]: 1 ``` -#### 47 打印 +#### 41 打印 ```python In [5]: lst = [1,3,5] @@ -791,7 +789,7 @@ lst: [1, 3, 5] -#### 48 创建属性的两种方式 +#### 42 创建属性的两种方式 返回 property 属性,典型的用法: @@ -832,7 +830,7 @@ class C: del self._x ``` -#### 49 创建range序列 +#### 43 创建range序列 1) range(stop) 2) range(start, stop[,step]) @@ -847,7 +845,7 @@ In [2]: range(0,11,1) Out[2]: range(0, 11) ``` -#### 50 反向迭代器 +#### 44 反向迭代器 ```python In [1]: rev = reversed([1,4,2,3,1]) @@ -862,7 +860,7 @@ In [2]: for i in rev: 1 ``` -#### 51 四舍五入 +#### 45 四舍五入 四舍五入,`ndigits`代表小数点后保留几位: @@ -874,7 +872,7 @@ In [12]: round(10.05,1) Out[12]: 10.1 ``` -#### 52 转为集合类型 +#### 46 转为集合类型 返回一个set对象,集合内不允许有重复元素: @@ -885,7 +883,7 @@ In [160]: set(a) Out[160]: {1, 2, 3, 4} ``` -#### 53 转为切片对象 +#### 47 转为切片对象 *class* slice(*start*, *stop*[, *step*]) @@ -900,7 +898,7 @@ In [3]: a[my_slice_meaning] Out[3]: [1, 2, 1] ``` -#### 54 拿来就用的排序函数 +#### 48 拿来就用的排序函数 排序: @@ -918,7 +916,7 @@ Out[4]: {'name': 'xiaohong', 'age': 20, 'gender': 'female'}] ``` -#### 55 求和函数 +####49 求和函数 求和: @@ -932,7 +930,7 @@ In [185]: sum(a,10) #求和的初始值为10 Out[185]: 21 ``` -#### 56 转元组 +#### 50 转元组 `tuple()` 将对象转为一个不可变的序列类型 @@ -943,7 +941,7 @@ Out[185]: 21 Out[18]: (1, 3, 5) ``` -#### 57 查看对象类型 +#### 51 查看对象类型 *class* `type`(*name*, *bases*, *dict*) @@ -967,7 +965,7 @@ In [4]: type(tuple()) Out[4]: tuple ``` -#### 58 聚合迭代器 +#### 52 聚合迭代器 创建一个聚合了来自每个可迭代对象中的元素的迭代器: @@ -985,7 +983,7 @@ In [7]: [str(y) + str(x) for x,y in zip(a,b)] Out[7]: ['a0', 'b1', 'c2', 'd3', 'e4'] ``` -#### 59 nonlocal用于内嵌函数中 +#### 53 nonlocal用于内嵌函数中 关键词`nonlocal`常用于函数嵌套中,声明变量`i`为非局部变量; 如果不声明,`i+=1`表明`i`为函数`wrapper`内的局部变量,因为在`i+=1`引用(reference)时,i未被声明,所以会报`unreferenced variable`的错误。 @@ -1006,7 +1004,7 @@ def excepter(f): return wrapper ``` -#### 60 global 声明全局变量 +#### 54 global 声明全局变量 先回答为什么要有`global`,一个变量被多个函数引用,想让全局变量被所有函数共享。有的伙伴可能会想这还不简单,这样写: ```python i = 5 @@ -1043,7 +1041,7 @@ h() print(i) ``` -#### 61 链式比较 +#### 55 链式比较 ```python i = 3 @@ -1052,7 +1050,7 @@ print(1 < i <= 3) # True ``` -#### 62 不用else和if实现计算器 +#### 56 不用else和if实现计算器 ```python from operator import * @@ -1072,7 +1070,7 @@ calculator(1, 2, '+') # 3 calculator(3, 4, '**') # 81 ``` -#### 63 链式操作 +#### 57 链式操作 ```python from operator import (add, sub) @@ -1085,7 +1083,7 @@ def add_or_sub(a, b, oper): add_or_sub(1, 2, '-') # -1 ``` -#### 64 交换两元素 +#### 58 交换两元素 ```python def swap(a, b): @@ -1095,7 +1093,7 @@ def swap(a, b): print(swap(1, 0)) # (0,1) ``` -#### 65 去最求平均 +#### 59 去最求平均 ```python def score_mean(lst): @@ -1107,7 +1105,7 @@ lst=[9.1, 9.0,8.1, 9.7, 19,8.2, 8.6,9.8] score_mean(lst) # 9.1 ``` -#### 66 打印99乘法表 +#### 60 打印99乘法表 打印出如下格式的乘法表 @@ -1140,7 +1138,7 @@ for i in range(1,10): ...: print() ``` -#### 67 全展开 +#### 61 全展开 对于如下数组: @@ -1185,7 +1183,7 @@ b.flatten() array([list([1, 2, 3]), list([4, 5])], dtype=object) ``` -#### 68 列表等分 +#### 62 列表等分 ```python from math import ceil @@ -1207,7 +1205,7 @@ print(r) # [[1, 3, 5, 7, 9]] ``` -#### 69 列表压缩 +#### 63 列表压缩 ```python def filter_false(lst): @@ -1219,7 +1217,7 @@ print(r) # ['ok', [1, 2]] ``` -#### 70 更长列表 +#### 64 更长列表 ```python def max_length(*lst): @@ -1233,7 +1231,7 @@ r = max_length([1, 2, 3], [4, 5, 6, 7], [8, 9]) print(f'更长的列表是{r}') # [4, 5, 6, 7] ``` -#### 71 求众数 +#### 65 求众数 ```python def top1(lst): @@ -1244,7 +1242,7 @@ r = top1(lst) print(f'{lst}中出现次数最多的元素为:{r}') # [1, 3, 3, 2, 1, 1, 2]中出现次数最多的元素为:1 ``` -#### 72 多表之最 +#### 66 多表之最 ```python def max_lists(*lst): return max(max(*lst, key=lambda v: max(v))) @@ -1254,7 +1252,7 @@ r = max_lists([1, 2, 3], [6, 7, 8], [4, 5]) print(r) # 8 ``` -#### 73 列表查重 +#### 67 列表查重 ```python def has_duplicates(lst): @@ -1270,7 +1268,7 @@ has_duplicates(y) # True -#### 74 列表反转 +#### 68 列表反转 ```python def reverse(lst): @@ -1281,7 +1279,7 @@ r = reverse([1, -2, 3, 4, 1, 2]) print(r) # [2, 1, 4, 3, -2, 1] ``` -#### 75 浮点数等差数列 +#### 69 浮点数等差数列 ```python def rang(start, stop, n): @@ -1296,7 +1294,7 @@ def rang(start, stop, n): rang(1, 8, 10) # [1.0, 1.7, 2.4, 3.1, 3.8, 4.5, 5.2, 5.9, 6.6, 7.3, 8.0] ``` -#### 76 按条件分组 +#### 70 按条件分组 ```python def bif_by(lst, f): @@ -1307,7 +1305,7 @@ bif_by(records, lambda x: x<80) # [[25, 31, 34], [89]] ``` -#### 77 map实现向量运算 +#### 71 map实现向量运算 ```python #多序列运算函数—map(function,iterabel,iterable2) @@ -1317,7 +1315,7 @@ list(map(lambda x,y:x*y+1,lst1,lst2)) ### [4, 9, 16, 25, 16, 13] ``` -#### 78 值最大的字典 +#### 72 值最大的字典 ```python def max_pairs(dic): @@ -1331,7 +1329,7 @@ r = max_pairs({'a': -10, 'b': 5, 'c': 3, 'd': 5}) print(r) # [('b', 5), ('d', 5)] ``` -#### 79 合并两个字典 +#### 73 合并两个字典 ```python def merge_dict(dic1, dic2): @@ -1340,7 +1338,7 @@ def merge_dict(dic1, dic2): merge_dict({'a': 1, 'b': 2}, {'c': 3}) # {'a': 1, 'b': 2, 'c': 3} ``` -#### 80 topn字典 +#### 74 topn字典 ```python from heapq import nlargest @@ -1354,7 +1352,7 @@ topn_dict({'a': 10, 'b': 8, 'c': 9, 'd': 10}, 3) # ['a', 'd', 'c'] ``` -#### 81 异位词 +#### 75 异位词 ```python from collections import Counter @@ -1369,7 +1367,7 @@ anagram('eleven', 'twelve') # False ``` -#### 82 逻辑上合并字典 +#### 76 逻辑上合并字典 (1) 两种合并字典方法 这是一般的字典合并写法 @@ -1389,7 +1387,7 @@ merged2 = ChainMap(dic1,dic2) print(merged2) # ChainMap({'x': 1, 'y': 2}, {'y': 3, 'z': 4}) ``` -#### 83 命名元组提高可读性 +#### 77 命名元组提高可读性 ```python from collections import namedtuple @@ -1400,7 +1398,7 @@ print(lst[0].y - lst[1].y) 使用命名元组写出来的代码可读性更好,尤其处理上百上千个属性时作用更加凸显。 -#### 84 样本抽样 +#### 78 样本抽样 使用`sample`抽样,如下例子从100个样本中随机抽样10个。 @@ -1412,7 +1410,7 @@ lst_sample = sample(lst,10) print(lst_sample) # [33, 40, 35, 49, 24, 15, 48, 29, 37, 24] ``` -#### 85 重洗数据集 +#### 79 重洗数据集 使用`shuffle`用来重洗数据集,**值得注意`shuffle`是对lst就地(in place)洗牌,节省存储空间** @@ -1423,7 +1421,7 @@ shuffle(lst) print(lst[:5]) # [50, 3, 48, 1, 26] ``` -#### 86 10个均匀分布的坐标点 +#### 80 10个均匀分布的坐标点 random模块中的`uniform(a,b)`生成[a,b)内的一个随机数,如下生成10个均匀分布的二维坐标点 @@ -1443,7 +1441,7 @@ Out[1]: (8.700789540392917, 1.2217577293254112)] ``` -#### 87 10个高斯分布的坐标点 +#### 81 10个高斯分布的坐标点 random模块中的`gauss(u,sigma)`生成均值为u, 标准差为sigma的满足高斯分布的值,如下生成10个二维坐标点,样本误差(y-2*x-1)满足均值为0,标准差为1的高斯分布: @@ -1465,7 +1463,7 @@ points = list(zip(x,y)) (9, 17.565074449028497)] ``` -#### 88 chain高效串联多个容器对象 +#### 82 chain高效串联多个容器对象 `chain`函数串联a和b,兼顾内存效率同时写法更加优雅。 @@ -1486,7 +1484,7 @@ for i in chain(a,b): 6 ``` -#### 89 操作函数对象 +#### 83 操作函数对象 ```python In [31]: def f(): @@ -1503,7 +1501,7 @@ i'm g 创建函数对象的list,根据想要调用的index,方便统一调用。 -#### 90 生成逆序序列 +#### 84 生成逆序序列 ```python list(range(10,-1,-1)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] @@ -1511,7 +1509,7 @@ list(range(10,-1,-1)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 第三个参数为负时,表示从第一个参数开始递减,终止到第二个参数(不包括此边界) -#### 91 函数的五类参数使用例子 +#### 85 函数的五类参数使用例子 python五类参数:位置参数,关键字参数,默认参数,可变位置或关键字参数的使用。 @@ -1571,7 +1569,7 @@ b VAR_POSITIONAL ``` 可以看到参数`a`既可以是位置参数也可是关键字参数。 -#### 92 使用slice对象 +#### 86 使用slice对象 生成关于蛋糕的序列cake1: @@ -2028,7 +2026,7 @@ g = (x for x in [1,3,5] if [5,7,9].count(x) > 0) ### 三、Python字符串和正则 -字符串无所不在,字符串的处理也是最常见的操作。本章节将总结和字符串处理相关的一切操作。主要包括基本的字符串操作;高级字符串操作之正则。目前共有`16`个小例子 +字符串无所不在,字符串的处理也是最常见的操作。本章节将总结和字符串处理相关的一切操作。主要包括基本的字符串操作;高级字符串操作之正则。目前共有`20`个小例子 #### 1 反转字符串