【CS61A】学习笔记
目录
- 参考资料
- 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
str
和repr
函数就是两个多态函数,无论传入什么对象,他们都能够返回一个你想要的结果。
不禁会好奇他们是怎么实现的,实际上,str
和repr
函数只是调用了所传入对象的相应类的内置函数__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】学习笔记相关推荐
- CS61A学习笔记(作业篇)
为了制止我半途而废,以及散落各处找不到的笔记,决定在这里记录学习笔记和作业遇到的困难等等. Lab 03 Q4: Repeated, repeated In Homework 2 you encoun ...
- UCB CS61A 学习笔记(持续更新一起学习ing)
week 1-2 本章介绍了基本的变量设定.函数定义,比较简单,有一个例题和作业题比较考验对基本概念和算法运算过程的理解,记录如下. 例1: f = min f = max g, h = min, m ...
- CS61A 课时笔记 efficiency
CS61A Spring 学习笔记 原文地址: http://composingprograms.com/pages/28-efficiency.html Measuring Efficiency 计 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
最新文章
- 用c语言写扫雷游戏倒计时代码,课内资源 - 基于VS2013实现的扫雷小游戏
- 【转】每天一个linux命令(50):crontab命令
- ps自定义形状工具_PS教程——用PS绘制虚线的三种方法
- 1命名规则 sentinel_Alibaba Sentinel 规则参数总结
- python selenium list index out of range
- [转载]对 Linux 专家非常有用的 20 个命令
- [轉]Android Libraries 介紹 - Butter knife
- Apache Mina的用法
- php怎么把时间精确到毫秒,如何使用php获取当前时间戳、日期并精确到毫秒
- ug二次开发python_学习UG NX软件二次开发你必须具备这些基础!
- 利用matlab信号带宽,测量均值频率、功率、带宽
- SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)
- 优美诗词(持续更新)
- 解析云产品SLA的价值
- 【ISP】浅析Lens Shading
- 输入一个数求他的因数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
- Java 生成 outLook .msg 文件
- 使用R包topGO绘制GO有向无环图
- ChatGPT版必应发飙!怒斥人类:放尊重些
- pm2 : 无法加载文件 C:\Users\zhanghuan\AppData\Roaming\npm\pm2.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 htt ps:/go.micr
热门文章
- jxls模板hashmap_使用Java + jxls基于模板导出excel
- c语言 游程编码,游程编码C语言.doc
- matlab 二维矩形函数,rect矩形函数 matlab中怎样编写矩形函数
- python数据处理(招聘信息薪资字段的处理)
- 拼多多sdk php,标签PHP拼多多SDK文章 - 零分博客 - 关注互联网且乱扯淡互联网的个人博客...
- java中抽象工厂模式_抽象工厂模式(详解版)
- python使用masscan扫描端口
- Centos系统安装masscan
- MINGW里面没有mingw32 make.exe
- Java远程连接数据库——远程连接MySQL数据库,操作和管理MySQL数据库