0%

CS61A 1 & 2

但凡我高中有准备点信息会考都不至于这样。

课程
教材

Week 1

1.2

1
2
3
from math import sqrt
f = max
y, x = x, y # 计算完右侧再赋值

Week 2

1.4

1
2
3
def f(a, b=1):
# f(a) -> f(a, 1)
# f(a, 2) -> f(a, 2)

1.5

1
2
3
4
5
6
7
8
9
assert a == b, 'a != b.'
'''
>>> command
result
'''

>>> from doctest import testmod
>>> testmod()
>>> run_docstring_examples(f, global(), True)

1.6

1
2
3
4
5
6
7
8
9
10
11
12
13
def f(term):

def compose(f, g):
def h(x):
return f(g(x))
return h
# curring
# f(x, y) => f(x)
def curried_pow(x):
def h(y):
return pow(x, y)
return h
lambda x: f(x)
装饰器:
1
2
3
4
5
6
7
8
9
10
@f
def g():
# ...

def g():
# ...
g = f(g)

# 二者等价
# 注意 f 的参数和返回值都是函数

当然这只是最基础的。

进阶

HW 02

You’re not allowed to rebind variables defined outside of our current frame!

(对于函数)里面不能改外面的变量。可以 nonlocal,或者建一个新的。nonlocal 在里面用,global 在外面用。

frame 搜不出东西,可能是本书自己造的概念。类似的说法比如 scope(作用域)。

1
lambda x, y: x % y or True

x % y != 0 时短路,返回的是 x % y 而非 or 运算得出的 True

Project 01 (Hog)

  • 用二次定义的函数时,外层的数据都会保留。显然必须是这样的,虽然与 C++ 不一样。