Skip to content

Commit e7d48bf

Browse files
author
guozhen3
committed
namedtuple 例子'
1 parent c2e8c33 commit e7d48bf

4 files changed

Lines changed: 109 additions & 2 deletions

File tree

md/README.md

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@
5050
5. [求最小键值对](求最小键值对.md)
5151
6. [字典-条件筛选](字典-条件筛选.md)
5252
7. [ChainMap逻辑上合并字典](ChainMap逻辑上合并字典.md)
53+
8. [键对多值的字典](defaultdict.md)
54+
9. [多字段分组](groupby分组.md)
55+
10. [6个极好的小功能](list_generator.md)
5356

5457
#### 五、集合
5558
1. [是否相同字母但顺序不同](是否相同字母但顺序不同.md)
@@ -75,6 +78,9 @@
7578
4. [反转字符串](反转字符串1.md)
7679
5. [字符串切片—查找替换操作](字符串切片—查找替换操作.md)
7780
6. [特殊字符检查](特殊字符检查.md)
81+
7. [格式化数字使用大全](str.format() 格式化数字的多种方法.md)
82+
8. [字符串32位加密](字符串32位加密.md)
83+
9. [反转字符串](反转字符串1.md)
7884

7985

8086
#### 八、绘图
@@ -85,12 +91,15 @@
8591
4. [词频云图](词频云图.md)
8692
5. [散点图](散点图.md)
8793
6. [plotly柱状图+折线图](./折线+柱状图.md)
94+
7. [折线+柱状图](折线+柱状图.md)
95+
8. [热力图](热力图.md)
96+
9. [饼状图](饼状图.md)
8897

8998

9099
#### 九、生成器
91100
1. [求斐波那契数列前n项(生成器版)](求斐波那契数列前n项(生成器版).md)
92101
2. [将list等分为子组(生成器版)](将list等分为子组(生成器版).md)
93-
3. [多层列表转为单层列表](多层列表转为单层列表.md)
102+
3. [多层列表全展开](多层列表转为单层列表.md)
94103
4. [计算聚合同时算](计算聚合同时算.md)
95104

96105
#### 十、迭代器
@@ -122,6 +131,12 @@
122131
[使用PyQt打造一款自己的计算器,仅有100行代码](./src/calculator2.py)
123132

124133

125-
134+
#### 十六、时间模块
135+
1. [指定日当月最后一天和该月天数](计算指定日期当月最后一天的日期和该月天数.md)
136+
2. [获取文件修改时间](获取指定文件路径下文件修改时间.md)
126137

127138
更多例子,正在每天陆续更新中,欢迎关注。
139+
140+
#### 十七、collections模块
141+
142+
1 [使用命名元祖代码更易维护](使用命名元祖代码更易维护.md)

md/list_generator.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,32 @@ print(merged)
8282
使用`ChainMap`合并字典,修改`merged['x']=10`,dic1中的`x``改变`
8383

8484
### 7 namedtuple让代码更易维护
85+
86+
```python
87+
from collections import namedtuple
88+
89+
# 一般写法
90+
lst = [(1.5, 2, 3.0), (-0.3, -1.0, 2.1), (1.3, 2.8, -2.5)]
91+
print(lst[0][1] - lst[1][1])
92+
93+
# namedtuple
94+
Point = namedtuple('Point', ['x', 'y', 'z']) # 定义名字为Point的元祖,字段属性有x,y,z
95+
lst = [Point(1.5, 2, 3.0), Point(-0.3, -1.0, 2.1), Point(1.3, 2.8, -2.5)]
96+
print(lst[0].y - lst[1].y)
97+
98+
99+
# 命名的元祖,写出来的代码相比第一种写法可读性更好,当属性变多时,我们甚至很难按照index方式访问元素。
100+
101+
# 更重要的是,当需要增加或删除一个维度时,命名元祖代码改动量比第一种要小。
102+
103+
# 如在属性x和y间增加一个维度k时:
104+
Point = namedtuple('Point', ['x', 'k', 'y', 'z'])
105+
lst = [Point(1.5, 2, 0.0, 3.0), Point(-0.3, -1.0, 0.0, 2.1),
106+
Point(1.3, 2.8, 0.0, -2.5)]
107+
108+
# 命名元祖不需要重写下面代码,
109+
print(lst[0].y - lst[1].y)
110+
111+
# 但是普通元祖就得如下修改:
112+
print(lst[0][2] - lst[1][2])
113+
```
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
### namedtuple让代码更易维护
2+
3+
```python
4+
from collections import namedtuple
5+
6+
# 一般写法
7+
lst = [(1.5, 2, 3.0), (-0.3, -1.0, 2.1), (1.3, 2.8, -2.5)]
8+
print(lst[0][1] - lst[1][1])
9+
```
10+
11+
使用命名的元祖`namedtuple`:
12+
```python
13+
Point = namedtuple('Point', ['x', 'y', 'z']) # 定义名字为Point的元祖,字段属性有x,y,z
14+
lst = [Point(1.5, 2, 3.0), Point(-0.3, -1.0, 2.1), Point(1.3, 2.8, -2.5)]
15+
print(lst[0].y - lst[1].y)
16+
```
17+
18+
命名的元祖,写出来的代码相比第一种写法可读性更好,当属性变多时,我们甚至很难按照index方式访问元素。
19+
20+
更重要的是,当需要增加或删除一个维度时,命名元祖代码改动量比第一种要小。
21+
22+
如在属性x和y间增加一个维度k时:
23+
```python
24+
Point = namedtuple('Point', ['x', 'k', 'y', 'z'])
25+
lst = [Point(1.5, 2, 0.0, 3.0), Point(-0.3, -1.0, 0.0, 2.1),
26+
Point(1.3, 2.8, 0.0, -2.5)]
27+
```
28+
29+
命名不需要重写下面代码,
30+
```python
31+
print(lst[0].y - lst[1].y)
32+
```
33+
34+
但是普通元祖就得如下修改:
35+
```python
36+
print(lst[0][2] - lst[1][2])
37+
```

src/use_namedtuple.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from collections import namedtuple
2+
3+
# 一般写法
4+
lst = [(1.5, 2, 3.0), (-0.3, -1.0, 2.1), (1.3, 2.8, -2.5)]
5+
print(lst[0][1] - lst[1][1])
6+
7+
# namedtuple
8+
Point = namedtuple('Point', ['x', 'y', 'z']) # 定义名字为Point的元祖,字段属性有x,y,z
9+
lst = [Point(1.5, 2, 3.0), Point(-0.3, -1.0, 2.1), Point(1.3, 2.8, -2.5)]
10+
print(lst[0].y - lst[1].y)
11+
12+
13+
# 命名的元祖,写出来的代码相比第一种写法可读性更好,当属性变多时,我们甚至很难按照index方式访问元素。
14+
15+
# 更重要的是,当需要增加或删除一个维度时,命名元祖代码改动量比第一种要小。
16+
17+
# 如在属性x和y间增加一个维度k时:
18+
Point = namedtuple('Point', ['x', 'k', 'y', 'z'])
19+
lst = [Point(1.5, 2, 0.0, 3.0), Point(-0.3, -1.0, 0.0, 2.1),
20+
Point(1.3, 2.8, 0.0, -2.5)]
21+
22+
# 命名元素不需要重写下面代码,
23+
print(lst[0].y - lst[1].y)
24+
25+
# 但是普通元祖就得如下修改:
26+
print(lst[0][2] - lst[1][2])

0 commit comments

Comments
 (0)