目录

  • 参考资料
  • Week 8
    • 8.1 Inheritance
    • 8.2 Representation
      • 8.2.1 String Represention
      • 8.2.2 Polymorphic Function
      • 8.2.3 Special Method Name
    • 8.3 Composition
    • Lab 07: Object-Oriented Programming, Iterators
    • Disc 07: Object-Oriented Programming
    • HW 05: Object-Oriented Programming, Linked Lists, Trees
    • Ants
  • Week 9
    • Efficiency (optional)
    • Decomposition
    • Data Examples
    • Lab 08: Linked Lists, Mutable Trees
    • Disc 08: Linked Lists, Trees, Representation
    • Lab 09: Midterm Review
  • Week 11
    • Scheme
    • Exceptions
    • Calculator
    • Lab 10: Scheme
    • HW 06: Scheme
    • Disc 10: Scheme, Scheme Lists
    • HW 07: Scheme Lists

本学习笔记为作者在学习CS61A(2020Fall)所记,只记录了一些容易忘记的重点内容(从第8周开始),建议读者自行前往官方网站学习。
作者学习时所用到的所有开源资料与作者所编写代码均开源在github上

参考资料

CS 61A Fall 2020

Week 8

8.1 Inheritance

继承的比较简单的概念,不再赘述。

8.2 Representation

8.2.1 String Represention

Python中规定,每一个对象都需要有两种字符串表示形式:

  • 一种是人类可解释的字符串(可以被人类看懂的),使用字符串构造函数str
  • 一种是Python可解释的字符串(也就是符合Python语法的表达式),使用函数repr
    对于函数repr而言,repr(object) = string,作用在一个对象上可以产生一个Python可解释的表达式字符串;
    对于函数str而言,作用在一个对象上可以产生一个人类可解释性的字符串,例如:
>>> from datetime import date
>>> tues = date(2011, 9, 12)
>>> repr(tues)
'datetime.date(2011, 9, 12)'
>>> tues
datetime.date(2011, 9, 12)
>>> str(tues)
'2011-09-12'
>>> print(tues)
2011-09-12

可以看到,str函数产生的是人类可以直接看懂的内容,repr函数产生的是Python可以直接看懂的内容(Python代码)。

8.2.2 Polymorphic Function

strrepr函数就是两个多态函数,无论传入什么对象,他们都能够返回一个你想要的结果。
不禁会好奇他们是怎么实现的,实际上,strrepr函数只是调用了所传入对象的相应类的内置函数__str____repr__
其中,python规定,repr会忽略所传入的对象,关注的是该对象对应的类的内置函数,实现方法类似如下:

def repr(x):return type(x).__repr__(x)

str函数的实现方法是,若所传入对象的类中没有__str__方法,会直接返回__repr__方法,实现如下:

def str(x):t = type(x)if hasattr(t, '__str__'):return t.__str__(x)return t.__repr__(x)

但是如果两个方法都没有的话,比如下面这个代码:

class CMH:def __init__(self, name, age):self.name = name self.age = age cmh = CMH('cmh', 21)

会产生以下效果:

>>>print(repr(cmh))
<__main__.CMH object at 0x000002210A0AE5B0>
>>>print(str(cmh))
<__main__.CMH object at 0x000002210A0AE5B0>

同时,只存在__str__方法的话,会是这样

class CMH:def __str__(self):return 'CMH love ZY'def __init__(self, name, age):self.name = name self.age = age cmh = CMH('cmh', 21)
>>>print(repr(cmh))
<__main__.CMH object at 0x000002210A0AE5B0>
>>>print(str(cmh))
CMH love ZY

8.2.3 Special Method Name

python提供了一系列的内置函数,方便类似于重载加法运算符(__add__)、强制类型转换(__float__)等操作,如下列代码:

class Ratio: #分数类def __init__(self, n, d):self.numer = n #分子 self.denom = d #分母def __repr__(self):return 'Ratio({0}, {1})'.format(self.numer, self.denom)def __str__(self):return '{0}/{1}'.format(self.numer, self.denom)def __add__(self, other):if isinstance(other, int):n = self.numer + self.denom * other d = self.denom elif isinstance(other, Ratio):n = self.numer * other.denom + self.denom * other.numer d = self.denom * other.denom elif isinstance(other, float):return float(self) + other g = gcd(n, d)return Ratio(n // g, d // g)__radd__ = __add__def __float__(self):return self.numer / self.denomdef gcd(a, b):while a != b:a, b = min(a, b), abs(a - b)return a
>>> Ratio(1, 2) + Ratio(1, 3)
Ratio(5, 6)
>>> Ratio(1, 2) + 1
Ratio(3, 2)
>>> 1 + Ratio(1, 2)
Ratio(3, 2)
>>> Ratio(1, 2) + 0.5
1.0
>>> 0.5 + Ratio(1, 2)
1.0

8.3 Composition

这一节主要讲了用python面向对象的方法实现链表还有之前讲过的树,比较简单就不做笔记了

Lab 07: Object-Oriented Programming, Iterators

Finished! Solution

Disc 07: Object-Oriented Programming

好像比较简单,鸽了鸽了。

HW 05: Object-Oriented Programming, Linked Lists, Trees

Finished! Solution

Ants

Finished! Solution

Week 9

Efficiency (optional)

讲了如何提升代码效率

Decomposition

使用模块化编程,举了一个餐厅的例子。

Data Examples

一些对象、迭代器、链表的例子。

Lab 08: Linked Lists, Mutable Trees

这个lab中的第5个问题,给出一个链表,判断该链表是否存在环。
不难想出一个空间复杂度为线性的解法,该问题的挑战版本要求一个空间复杂度为常数的解法。
于是我们不可以标记每个点是否被经过,我们可以使用两个指针,一个步长为1,一个步长为2,步长为2的指针初始化位置在步长为1的指针之前,若链表中存在环,那么步长为2的指针最终会与步长为1的指针相遇。
Finished! Solution

Disc 08: Linked Lists, Trees, Representation

Finished! Solution

Lab 09: Midterm Review

Finished! Solution

Week 11

Scheme

这一节主要讲了Scheme的语法,没啥太特殊的内容。包括:表达式如何书写(括号表达式),if-else语句如何书写,多条件语句如何书写(cond),链表的语法结构和应用等等。

Exceptions

Calculator

Lab 10: Scheme

Finished! Solution

HW 06: Scheme

Finished! Solution

Disc 10: Scheme, Scheme Lists

HW 07: Scheme Lists

后面的懒得写了…难度不大但是Scheme代码量比较大需要慢慢看。

【CS61A】学习笔记相关推荐

  1. CS61A学习笔记(作业篇)

    为了制止我半途而废,以及散落各处找不到的笔记,决定在这里记录学习笔记和作业遇到的困难等等. Lab 03 Q4: Repeated, repeated In Homework 2 you encoun ...

  2. UCB CS61A 学习笔记(持续更新一起学习ing)

    week 1-2 本章介绍了基本的变量设定.函数定义,比较简单,有一个例题和作业题比较考验对基本概念和算法运算过程的理解,记录如下. 例1: f = min f = max g, h = min, m ...

  3. CS61A 课时笔记 efficiency

    CS61A Spring 学习笔记 原文地址: http://composingprograms.com/pages/28-efficiency.html Measuring Efficiency 计 ...

  4. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  5. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  6. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  8. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  9. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  10. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

最新文章

  1. 用c语言写扫雷游戏倒计时代码,课内资源 - 基于VS2013实现的扫雷小游戏
  2. 【转】每天一个linux命令(50):crontab命令
  3. ps自定义形状工具_PS教程——用PS绘制虚线的三种方法
  4. 1命名规则 sentinel_Alibaba Sentinel 规则参数总结
  5. python selenium list index out of range
  6. [转载]对 Linux 专家非常有用的 20 个命令
  7. [轉]Android Libraries 介紹 - Butter knife
  8. Apache Mina的用法
  9. php怎么把时间精确到毫秒,如何使用php获取当前时间戳、日期并精确到毫秒
  10. ug二次开发python_学习UG NX软件二次开发你必须具备这些基础!
  11. 利用matlab信号带宽,测量均值频率、功率、带宽
  12. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)
  13. 优美诗词(持续更新)
  14. 解析云产品SLA的价值
  15. 【ISP】浅析Lens Shading
  16. 输入一个数求他的因数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  17. Java 生成 outLook .msg 文件
  18. 使用R包topGO绘制GO有向无环图
  19. ChatGPT版必应发飙!怒斥人类:放尊重些
  20. pm2 : 无法加载文件 C:\Users\zhanghuan\AppData\Roaming\npm\pm2.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 htt ps:/go.micr

热门文章

  1. jxls模板hashmap_使用Java + jxls基于模板导出excel
  2. c语言 游程编码,游程编码C语言.doc
  3. matlab 二维矩形函数,rect矩形函数 matlab中怎样编写矩形函数
  4. python数据处理(招聘信息薪资字段的处理)
  5. 拼多多sdk php,标签PHP拼多多SDK文章 - 零分博客 - 关注互联网且乱扯淡互联网的个人博客...
  6. java中抽象工厂模式_抽象工厂模式(详解版)
  7. python使用masscan扫描端口
  8. Centos系统安装masscan
  9. MINGW里面没有mingw32 make.exe
  10. Java远程连接数据库——远程连接MySQL数据库,操作和管理MySQL数据库