[ICS_32A]Lecture2Week4

Python

   
   

@ZYX 写于2019年10月25日

Namedtuple

  1. namedtuple(‘Name’,["field1","field2",..,"fieldn"]) ->field名要是str
    • 大概率不会考:可以用任何一个collection来装这些名字,包括tuple和set,但是set会让顺序变乱
  2. 例子 Point
    //三个等价的构造
    Point(3,5,7)
    Point(x=3,y=5,z=7)
    Point(z=7,y=5,x=3) //如果明确field名的话,可以调换顺序
  3. 参数一定要传的刚刚好,构造新对象的时候不能缺少任何一个参数,也不能多一个函数
  4. p1= Point(3,5,7)
    p1[0]==p1.x==3
    可以用p1[0]调X
    可以用p1.x调x
  5. 和tuple一样,不可以对fields重新赋值
    p1.x=10 =>WRONG

    • 几种变相重新赋值的方法:
      1. 创建新的对象,并重新赋值
        p2=Point(x=p1.x-1,y=p1.y,z=p1.z)
      2. _replace 没讲
  6. print(p1)
    Point(x=3,y=5,z=7)

  7. field可以与其他一些东西重名,比如说可以创建p1.input或者p1.print之类的。不会与顶层方法产生冲突。

    Protocol

TIPS:

  1. 编程过程中不要一直编不测试,要模块化编程,然后逐个测试每一个function