【菜gou的CS61A学习笔记9 Function & Containers】

        上来还是大概说一下本节课的内容,本节课主要讲述了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代码敲一遍深入理解。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值