上来还是大概说一下本节课的内容,本节课主要讲述了python的基本的数据类型,比如列表元组之类的,然后本次还是两节合到一起,上一节Function Example的内容还是倾向于习题课的内容。
一、lecture
Function ppt:https://inst.eecs.berkeley.edu/~cs61a/sp21/assets/slides/09-Function_Examples_full.pdf
Container ppt:
https://inst.eecs.berkeley.edu/~cs61a/sp21/assets/slides/10-Containers_full.pdf
1.1 容器的引入
我们首先可以联想到相比于其他学习到的编程语言如C++ 、Java等存在数组、String等数据类型,我们在本节课的学习过程中还不了解python是否存在这样类似的数据类型,我们接下来就可以来探索一下python的相关语法。首先还是引入一个例子:
图1 : Simple Pairs例题
这个题的意思就是如果我有一对数,我既可以通过这两个数返回一个值来代表这两个数,同时可以通过一个值来返回组成这个值的两个数(语文太辣鸡了请谅解QAQ)
那么我们就仿照他下一页的ppt构造一个自己的pair结构。(其实就是改个数,建议自己写一遍,实在不会再对照ppt)
def pair(a, b):
"""
Return a value that represents the ordered pair of
non-negative integer values (A, B).
>>> pair(1,2)
16
>>> pair(0,1)
0
>>> pair(2,3)
648
"""
return a ** 3 * b ** 4
def left(p):
return multiplicity(3, p)
def right(p):
return multiplicity(4, p)
def multiplicity(factor, n):
"""Assuming FACTOR and N are integers with FACTOR > 1, return
the number of times N may be evenly divided by FACTOR.
"""
cnt = 0
while (n / factor) == (n // factor):
n = n / factor
cnt += 1
return cnt
这种写法仅供参考,我也没有进行过多的测试,总之由两个数通过计算得到一个返回值,然后再通过multiplicity函数通过连续的除法计算出最开始构成返回值的两个数。
然后这节课引入了一个比较有意思的概念,我们先来观察如下的一个函数。
图2 : Nonlocal的引入
这里我们发现了一个问题,就是当which == 1的时候返回的是什么值?
def pair(a, b):
“”“
引入nonlocal的语法概念
”“”
def pair_func(which, v = None):
if which == 0 :
return a
elif which == 1 :
return b
elif which == 2:
a = v
else:
b = v
return pair_func
pair(1,2)(1,3)
我们执行如上代码后会发现执行出错,我们这里是想让程序返回b的值2,但是执行的时候系统就会报错,提示当前的return b是头部的函数pair的非法引用,就导致了报错,那么我们怎么解决这个问题呢?python为我们提供了一种解决方案成为nonlocal的声明方式,ppt解释如下:
图3 : Nonlocal
可以看到我们如果想访问parent frame的变量的话可以使用这种方法,但是注意他只能在嵌套函数内部使用,ppt提到了not including the global frame,并且需要在上一层函数中存在这些变量才可以使用,要谨记这两条概念。同时我在前面就已经提到过课上介绍的有时候非常简单,大家有兴趣可以自行下课查看,那么休整过后的写法如下所示:
def pair(a, b):
def pair_func(which, v = None):
nonlocal a, b
if which == 0 :
return a
elif which == 1 :
return b
elif which == 2:
a = v
else:
b = v
return pair_func
#print(pair(1,2)(1,3))
然后提供一个参考资料可以再学习一下:Python nonlocal Keyword
1.2 Sequence
这一部分内容涉及到python最基础的数据类型,但是ppt里总结了一个表格非常方便记忆一些特性,具体的使用还需要我们下来进一步熟悉。
图4 : python数据类型
主要由以下几个方面考虑:
1、其组成元素的种类?是否可以有任何对象组成或者是只能有整型、字符型构成等。
2、是否可以按下标访问元素呢?
3、是否可以更改元素的值?
4、是否可迭代?
5、长度是否是有限还是无穷?
当然这个表还涉及到一些基本的数据类型没有概括到,比如字典和集合类型,有兴趣可以课下继续深入了解。后面的ppt内容就是对以上规律的实践,建议按照ppt代码敲一遍深入理解。