修改了部分文档
parent
d2b314124c
commit
d4ed9c7ded
10
README.md
10
README.md
|
@ -14,14 +14,4 @@
|
|||
151.101.184.133 camo.githubusercontent.com
|
||||
```
|
||||
|
||||
<center>图1. 公开课信息</center>
|
||||
|
||||
![](res/open-course.png)
|
||||
|
||||
<center>图2. 扫码加入公开课</center>
|
||||
|
||||
![](res/qrcode.png)
|
||||
|
||||
<center>图3. 学习交流群信息</center>
|
||||
|
||||
![](res/qrcode-group.png)
|
||||
|
|
|
@ -131,8 +131,6 @@ print(students) # [骆昊: 40, 王小锤: 16, 王大锤: 25]
|
|||
```
|
||||
|
||||
|
||||
|
||||
|
||||
### 面向对象的支柱
|
||||
|
||||
面向对象编程有三大支柱,就是我们之前给大家划重点的时候圈出的三个词:封装、继承和多态。后面两个概念在下一节课中会详细说明,这里我们先说一下什么是封装。我自己对封装的理解是:**隐藏一切可以隐藏的实现细节,只向外界暴露简单的调用接口**。我们在类中定义的对象方法其实就是一种封装,这种封装可以让我们在创建对象之后,只需要给对象发送一个消息就可以执行方法中的代码,也就是说我们在只知道方法的名字和参数(方法的外部视图),不知道方法内部实现细节(方法的内部视图)的情况下就完成了对方法的使用。
|
||||
|
|
|
@ -79,7 +79,7 @@ print(calc(1, 2, c=3, d=4)) # 10
|
|||
如果我们希望上面的`calc`函数不仅仅可以做多个参数求和,还可以做多个参数求乘积甚至更多的二元运算,我们就可以使用高阶函数的方式来改写上面的代码,将加法运算从函数中移除掉,具体的做法如下所示。
|
||||
|
||||
```Python
|
||||
def calc(*, init_value, op, *args, **kwargs):
|
||||
def calc(*args, init_value, op, **kwargs):
|
||||
result = init_value
|
||||
for arg in args:
|
||||
result = op(result, arg)
|
||||
|
@ -99,8 +99,8 @@ def mul(x, y):
|
|||
return x * y
|
||||
|
||||
|
||||
print(calc(init_value=0, op=add, 1, 2, 3, x=4, y=5)) # 15
|
||||
print(calc(init_value=1, op=mul, 1, 2, x=3, y=4, z=5)) # 120
|
||||
print(calc(1, 2, 3, init_value=0, op=add, x=4, y=5)) # 15
|
||||
print(calc(1, 2, x=3, y=4, z=5, init_value=1, op=mul)) # 120
|
||||
```
|
||||
|
||||
通过对高阶函数的运用,`calc`函数不再和加法运算耦合,所以灵活性和通用性会变强,这是编程中一种常用的技巧,但是最初学者来说可能会稍微有点难以理解。需要注意的是,将函数作为参数和调用函数是有显著的区别的,**调用函数需要在函数名后面跟上圆括号,而把函数作为参数时只需要函数名即可**。上面的代码也可以不用定义`add`和`mul`函数,因为Python标准库中的`operator`模块提供了代表加法运算的`add`和代表乘法运算的`mul`函数,我们直接使用即可,代码如下所示。
|
||||
|
|
Loading…
Reference in New Issue