cs61a笔记

X81iKNunaCIPJMD

  • None -> print().输出是print这种no pure函数的side effect
  • 一个函数调用另一个函数,形成了不同local frame。每个local frame有每一层的执行的namescape。互相没有联系。global frame是local frame的关系。
  • 函数调用时,参数传入会在local frame
  • assert,判断输入是否合理
  • 当function的return是另一个fuction时。 传多个参数,首先是外层函数,其次传给return function的函数。传参数->return function->传参数 FOmDp5R3hvagUcr 两次调用函数,就是两层local frame
  • why higher order fuction? OhGBvPZ8YyxCa9r
    1. 抽象共同特征
    2. 减少关系连接
  • lambda没有statement,也没有name。
  • AHbsPWT2N3G8aLc 01 if gay else straight
  • return lambda嵌套函数,调用图 SlLNxXVYT9cHq1F
  • disc DJZvq43VaiL7KQ9
  • Local Names are not visable to other funcs. A调用B, A和B的参数是互不交集的。 A嵌套B,A是B的parent frame,A的参数对B是visable
  • lambda区别于function:没name
  • 3bl5AEYFGIvip4u (lambda:3)() 3
  • racOfFoHmqJVlWn 调用函数时候才会形成local frame。local frame先在本层找,没有再去global frame找。
  • 68nGVOS2qEkTAgB self reference 返回自身,递归调用?
  • 调用函数前,把所有参数evaluate完。

mFgDUEybdRKwxXY

  • decocrators trace functions.可以自定义显示的trace内容. tdBuWHmy1j7gqfI
  • mututal recursion 7SgM2cYEPhjzbmd
  • if else,在无return的if中,else最好不要省略
  • iteration -> recursion
    把每次iterate重复的部分抽象封装。 Eo4sVAUl9gfJhyF 自顶向下展开函数后 自底向上return
  • rgQtVFw6fbNm5y1 call 直到return才结束
  • no return - > none
  • eSmkKtnDhV24CH3 trace 代替print
  • tree recursion video in 2018
  • change iteration to simpler by 'in' p5OoueQAPWVTYyv 68N3KwPrH2MJhFb expression是可循环value,etc list. 顺序: 将每次循环的value绑定到name,然后再执行下面的suite SUHi6MsNbBQj4p9

  • Range(代替计数器(index)) NvG86YrkwOcIShL

    • length: end - start
    • 范围: 包含start,不包含end
    • 只有一个参数时,第一个参数为0
      • [1:] 参数+: --> 最后一个参数到end
  • 89bqsKukRL63NI5

    • 用递归compute,展开计算,递归返回底层结果。
  • reverse

    • qv8pCOoiMWzQ9x3
    • Br8kSegXGWq9Qfd
    • 抽象出共同特点作为扩展的case
  • recurse 从小到大递归,先找到base case(最大值),再递归到更小的case cH6uvARdM7YeSVN

    • 将返回结果作为函数的参数 HlMtzK7PU49EeDL nZ3Fc985SgwifBR
    • recurse --> iteration: EWZ7kDV1eMu9H6z
  • help function在外面能调用,里面省去了重复的参数。

  • sequence aggregation

    • msK3EWcoyTXt4Mv
  • ckyCLbDAGzZYJpV constructor -> define 某种对象 selector -> 选择数据结构中的value
  • nuPfWhXR23GHO1z constructor and selector
  • 用数据结构存储需要的值,selector来选取值,用定义的计算方式来计算。 第一层抽象 第二层 第三层:w
  • 2XDpxa7oNPBiEMb
  • irvdTlNgsfWecXj
  • slice 是用range取指定范围内映射的简化
  • WrXjlvbVRJyOpx7
  • 在某范围内,找映射函数的最大值
  • iterable类 基础computation
  • BZhYAl83wpK2omx sequence aggregation(内置在iterable 数据结构里的函数
  • EhL8a5iI4k2Kb6f tree: label brach, tree --> list
  • lQiWxE42vqTnG8I
    • use tree to do recursion, need to sum all branches
    • 遍历tree上所有的分支 求和
  • 6C2XAa75IpgSTkD
    • 用tree来做递归,与过去递归差别在:它是普通递归的封装,普通递归只是调用本身函数,tree的base case一般是leaf,recursion是遍历branch,value是label。
  • PlLnYUrixmsf3WD
    • tail recursion
    • n是一个计数器,k是个result的过程值。(如何写递归多参数)

  1. tree - constructor.tree 由label和branches组成。tree是constructor,label和braches是selector。
  2. fib tree --> tree recursion(分开相加,有选择) 也是tree,在tree本身结构上递归。
  3. count_nodes 遍历所有brach,总和。
  4. A4n7FNobgfVzQXd 关于tree最好的图解!!!
  1. I5lHQKCgftex4dP
  2. ASCII --> 英语 Unicode --> all languages
  3. pop remove类似切片的黑盒化
    1. image.png
  4. 862uNn7JUTViIEM
  5. list

    pop return 最后一个value

  6. mrbUix3LQBIfw7E
    1. list in list, 之间的应用关系借助一个空list[]

  7. 只有slice类选中赋值可以插入list,否则只是value。插入list是put value,而不是container s[0:0] --> insert s[0:1] --> replace and insert
  8. tuple,进行操作后不会改变本身。list相反。
  • Iterators
    • iter --> return 一个 iterator
    • next --> 返回下一个
  • ANcvZKMl4e8uY7o
  • tCP3iFJGOYAbnEx
    • yield用在某些return后还继续操作的情况下
  • HQi5Kmj6GlSkyC4
    • result[1]
      • list --> generator
  • 当创建一个instance时发生的,self绑定到创建的instance上,传入的参数绑定到__init__的参数上. 4jic7N6UwPYCzgS
    1. getattr(instance_name, 'attrname')
    1. hasattr(instance_name, 'attrname')
  1. inherience不是copy attribute,而是向上访问base类的attribute
    1. how to look up attribute
      1. this class
      2. base class
  2. inherience -
    1. 使用已有的方法。进而扩展
    2. 复写
  3. multiple inherience
    1. 可以有多个父类
  • repr nad repr
    • repr --> class attribute
  • nySrUaoT6KWmbhN
    • link list -> add new link/chage first and add new empty list
  • 1l3WTcpxqNkRgaJ
    • recusre in link list
  • zSoReP2XpVG4EHU
  • 写很多题要看construct
  • ryLnGkWR2bHMemx
    • scheme - fractal
  • 6OkX4hDi7Ljln5Z
    • built in and user defined procedure
  • dX5MBDgkyqSOwNe
    • try exception
  • REPL --> Read-Eval-Print-Loop

    • Read --> Turns input into a useful data structure
    • Literal(1)
    • Name('x')
  • the types of expressions in PyCombinator --> literal, name, call expression, lambda expression

  • the types of values in PyCombinator --> number, lambda function, primitive function

  • A lambda function is the result of evaluating a lambda expression

  • DUg1E6Iw9b3dkcq

  • QXM3aJdgKkIF6Pz

  • SbITgO3dDkWiEX7

  • PCjV68gomZ9qveH

Chapter 1

SFWJKI_e0cyO9 JF1Twz_4fkX2C

1st

  1. 变量类型必须有,且不可改变,在运行前verify
    1. Qz65SR_4Z5cVh
  2. A func is called a method
    1. define func --> public staic
    2. func's parameters and return value must declared type
    3. Only one return val

2nd

  1. 没有main的method可以在有main的method里被调用
    1. 3bwDza_fRYy3a
  1. 1VoyFN_PEPWn9

原生的写法-->method

  1. static

    1. 如果子class不用夫class的instance的method或val。那即声明为static
  2. private

    1. safe to change private method(implement)

    Add last

    A2i6uT_fd93ey

得考虑到list为null的情况

sentinel node

  1. JpYTS7_XOBqEh 1.