CS61A 笔记

Realknow Lv2

CS61A笔记(自用)[更新中]

本笔记仅记录部分知识点

Lecture 2 函数

1
2
3
4
>>> print(print(1), print(2))
4
2
None None

print这个函数返回值是None,它还有一个副作用就是打印并换行。

所以先打印1,换行,再打印2,再换行,再打印None None。

Lecture 4 高阶函数

Generalization(泛化):

e.g. 图形面积函数的泛化

1
2
3
4
5
6
7
8
9
10
from math import pi, sqrt

def area_square(r):
return r * r

def area_circle(r):
return r * r * pi

def area_hexagon(r):
return r * r * 3 * sqrt(3) / 2

我们可以看到,三个函数有共性的部分:r*r。所以可以将其泛化为一个新的函数area

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from math import pi, sqrt

def area(r, shape_constant):
assert r > 0, 'A length must be positive' #assert语句
return r * r * shape_constant

def area_square(r):
return area(r, 1)

def area_circle(r):
return area(r, pi)

def area_hexagon(r):
return area(r, 3 * sqrt(3) / 2)

在python里,函数也可以作为参数而传入其它函数。

e.g. 自然数求和、立方求和二者也可以进行泛化

1
2
3
4
5
6
7
8
9
10
11
12
13
def sum_naturals(n):
total, k = 0, 1
while k <= n:
total = total + k
k = k + 1
return total

def sum_cubes(n):
total, k = 0, 1
while k <= n:
total = total + pow(k, 3)
k = k + 1
return total

将这样共性的求和过程泛化为summation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def natural(k):
return k

def cube(k):
return pow(k, 3)

def summation(n, term):
total, k = 0, 1
while k <= n:
total = total + term(k)
k = k + 1
return total

def sum_naturals(n):
return summation(n, natural)

def sum_cubes(n):
return summation(n, cube)

make_adder(这个我一开始也有一点没理解上网查阅得知这叫做“函数柯里化”:函数柯里化 - ChoZ - 博客园):

1
2
3
4
def make_adder(n):
def adder(k):
return k + n
return adder

调用该函数:make_adder(1)(2),1被绑定到n,并返回adder这个函数;后面的2被绑定到k,然后返回k+n这个数值。

为什么要使用柯里化?

  1. 部分应用: 柯里化使得我们可以创建一个新函数,将一些参数固定,剩下的参数稍后再提供。这对于重复使用某些参数值的场景非常有用。
  2. 提高可重用性: 柯里化可以使函数更加灵活和可复用。通过预先提供部分参数,剩下的参数可以通过不同的函数调用来组合。
  3. 函数式编程: 柯里化是函数式编程中的重要概念,支持构建可组合的函数。它鼓励我们通过组合小的、简洁的函数来构建复杂的逻辑。
  • Title: CS61A 笔记
  • Author: Realknow
  • Created at : 2026-02-27 12:19:16
  • Updated at : 2026-03-04 22:23:54
  • Link: https://realknowtech.github.io/2026/02/27/CS61A-笔记/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
CS61A 笔记