We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 48a00f2 commit 8e74dd4Copy full SHA for 8e74dd4
Day01-20/08.常用数据结构之列表-1.md
@@ -43,7 +43,7 @@ print(f'6点出现了{f6}次')
43
44
### 创建列表
45
46
-在 Python 中,**列表是由一系元素按特定顺序构成的数据序列**,这就意味着如果我们定义一个列表类型的变量,**可以用它来保存多个数据**。在 Python 中,可以使用`[]`字面量语法来定义列表,列表中的多个元素用逗号进行分隔,代码如下所示。
+在 Python 中,**列表是由一系列元素按特定顺序构成的数据序列**,这就意味着如果我们定义一个列表类型的变量,**可以用它来保存多个数据**。在 Python 中,可以使用`[]`字面量语法来定义列表,列表中的多个元素用逗号进行分隔,代码如下所示。
47
48
```python
49
items1 = [35, 12, 99, 68, 55, 35, 87]
Day01-20/10.常用数据结构之元组.md
@@ -26,7 +26,7 @@ print(t1[2]) # 98
26
print(t2[-1]) # 四川成都
27
28
# 切片运算
29
-print(t2[:2]) # ('骆昊', 43)
+print(t2[:2]) # ('骆昊', 45)
30
print(t2[::3]) # ('骆昊', '四川成都')
31
32
# 循环遍历元组中的元素
@@ -40,7 +40,7 @@ print('Hao' not in t2) # True
40
41
# 拼接运算
42
t3 = t1 + t2
-print(t3) # (35, 12, 98, '骆昊', 43, True, '四川成都')
+print(t3) # (35, 12, 98, '骆昊', 45, True, '四川成都')
# 比较运算
print(t1 == t3) # False
@@ -159,9 +159,9 @@ a, b, c = b, c, a
159
当然,Python 中的元组和列表类型是可以相互转换的,我们可以通过下面的代码来完成该操作。
160
161
162
-infos = ('骆昊', 43, True, '四川成都')
+infos = ('骆昊', 45, True, '四川成都')
163
# 将元组转换成列表
164
-print(list(infos)) # ['骆昊', 43, True, '四川成都']
+print(list(infos)) # ['骆昊', 45, True, '四川成都']
165
166
frts = ['apple', 'banana', 'orange']
167
# 将列表转换成元组
Day01-20/16.函数使用进阶.md
@@ -51,7 +51,7 @@ print(calc(0, add, 1, 2, 3, 4, 5)) # 15
51
print(calc(1, mul, 1, 2, 3, 4, 5)) # 120
52
```
53
54
-上面的`calc`函数通过将运算符变成函数的参数,实现了跟加法运算耦合,这是一种非常高明和实用的编程技巧,但对于最初学者来说可能会觉得难以理解,建议大家细品一下。需要注意上面的代码中,将函数作为参数传入其他函数和直接调用函数是有显著的区别的,**调用函数需要在函数名后面跟上圆括号,而把函数作为参数时只需要函数名即可**。
+上面的`calc`函数通过将运算符变成函数的参数,实现了跟加法运算的解耦合,这是一种非常高明和实用的编程技巧,但对于最初学者来说可能会觉得难以理解,建议大家细品一下。需要注意上面的代码中,将函数作为参数传入其他函数和直接调用函数是有显著的区别的,调用函数需要在函数名后面跟上圆括号,而把函数作为参数时只需要函数名即可**。
55
56
如果我们没有提前定义好`add`和`mul`函数,也可以使用 Python 标准库中的`operator`模块提供的`add`和`mul`函数,它们分别代表了做加法和做乘法的二元运算,我们拿过来直接使用即可,代码如下所示。
57
Day01-20/17.函数高级应用.md
@@ -4,7 +4,7 @@
4
5
### 装饰器
6
7
-Python 语言中,装饰器是“**用一个函数装饰另外一个函数并为其提供额外的能力**”的语法现象。装饰器本身是一个函数,它的参数是被装饰的函数,它的返回值是一个带有装饰功能的函数。通过前面的描述,相信大家已经听出来了,装饰器是一个高阶函数,它的参数和返回值都是函数。但是,装饰器的概念对编程语言的初学者来说,还是让人头疼的,下面我们先通过一个简单的例子来说明装饰器的作用。假设有名为`downlaod`和`upload`的两个函数,分别用于文件的上传和下载,如下所示。
+Python 语言中,装饰器是“**用一个函数装饰另外一个函数并为其提供额外的能力**”的语法现象。装饰器本身是一个函数,它的参数是被装饰的函数,它的返回值是一个带有装饰功能的函数。通过前面的描述,相信大家已经听出来了,装饰器是一个高阶函数,它的参数和返回值都是函数。但是,装饰器的概念对编程语言的初学者来说,还是让人头疼的,下面我们先通过一个简单的例子来说明装饰器的作用。假设有名为`downlaod`和`upload`的两个函数,分别用于文件的下载和上传,如下所示。
8
9
10
import random
@@ -92,7 +92,7 @@ download('MySQL从删库到跑路.avi')
92
upload('Python从入门到住院.pdf')
93
94
95
-在 Python 中,使用装饰器很有更为便捷的**语法糖**(编程语言中添加的某种语法,这种语法对语言的功能没有影响,但是使用更加方法,代码的可读性也更强,我们将其称之为“语法糖”或“糖衣语法”),可以用`@装饰器函数`将装饰器函数直接放在被装饰的函数上,效果跟上面的代码相同。我们把完整的代码为大家罗列出来,大家可以再看看我们是如何定义和使用装饰器的。
+在 Python 中,使用装饰器还有更为便捷的**语法糖**(编程语言中添加的某种语法,这种语法对语言的功能没有影响,但是使用更加便捷,代码的可读性也更强,我们将其称之为“语法糖”或“糖衣语法”),可以用`@装饰器函数`将装饰器函数直接放在被装饰的函数上,效果跟上面的代码相同。我们把完整的代码为大家罗列出来,大家可以再看看我们是如何定义和使用装饰器的。
96
97
98
Day01-20/19.面向对象编程进阶.md
@@ -92,6 +92,14 @@ class Triangle(object):
"""计算面积"""
p = self.perimeter() / 2
return (p * (p - self.a) * (p - self.b) * (p - self.c)) ** 0.5
+
+if Triangle.is_valid(3, 4, 5):
+ t = Triangle(3, 4, 5)
99
+ print(f'周长: {t.perimeter()}')
100
+ print(f'面积: {t.area()}')
101
+else:
102
+ print('无效的边长!!!')
103
104
105
上面的代码使用`staticmethod`装饰器声明了`is_valid`方法是`Triangle`类的静态方法,如果要声明类方法,可以使用`classmethod`装饰器(如上面的代码15~18行所示)。可以直接使用`类名.方法名`的方式来调用静态方法和类方法,二者的区别在于,类方法的第一个参数是类对象本身,而静态方法则没有这个参数。简单的总结一下,**对象方法、类方法、静态方法都可以通过“类名.方法名”的方式来调用,区别在于方法的第一个参数到底是普通对象还是类对象,还是没有接受消息的对象**。静态方法通常也可以直接写成一个独立的函数,因为它并没有跟特定的对象绑定。
@@ -125,9 +133,12 @@ class Triangle(object):
125
133
126
134
127
135
128
-t = Triangle(3, 4, 5)
129
-print(f'周长: {t.perimeter}')
130
-print(f'面积: {t.area}')
136
137
138
+ print(f'周长: {t.perimeter}')
139
+ print(f'面积: {t.area}')
140
141
131
142
132
143
144
### 继承和多态
0 commit comments