[ICS_33] Week01 Note01 Review

[ICS_33] Week01 Note01 Review

Python


@ZYX 写于2020年06月25日

Review

1. Python in 4 sentences

  1. Python in Four Sentences:
    1. Names (in namespaces) are bound to objects.
    2. Everything that Python computes with is an object.
    3. Every object has its own namespace. 函数也能有attribute (a dictionary that binds its internal names to other objects)
    4. Python has rules about how things work
  2. Objects are the fundamental unit with which Python computes:
    1. We can compute with int objects (instance objects from the int class) by using operators
    2. We can compute with function objects by calling them
    3. we can also pass functions as arguments to functions and return functions as results from functions
    4. We can compute with module objects by importing them
      1. import random
        1. The name random is bound to the random moudle object
      2. from random import randint
        1. The name randint is bound to the function object 'randint'
(更多…)
           
[ICS_32A]Lecture2Week4

[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
           
[ICS_32A] Lecture1Week4

[ICS_32A] Lecture1Week4

Python


@ZYX 写于2019年10月23日

模块导入 Module Import

#powers.py
def square(n):
    return n*n
def cube(n):
    return n**3

#program.py
import powers
def ask_for_number():
    return int(input())
def run_user_interface():
    number=ask_for_number()
    squared=powers.square(number)
    cubed=powers.cube(number)
    print(f'The square of {number} is {squared}')
    print(f'The cube of {number} is {cubed}')

run_user_interface()
  1. Python的模块名不能重,不要把自己的模块命名成math.py之类的
  2. Executable module 对比 module that provide tools

    some_else.py

    def something():
        number=program.ask_for_number() =》出错
  3. import x 实质上是让Shell直接把x.py执行一遍,所以全局语句也会被执行
  4. 这也就是为什么要用 if name == "main":
  5. 更改后的program.py

    program.py

    import powers
    def ask_for_number():
        return int(input())
    def run_user_interface():
        number=ask_for_number()
        squared=powers.square(number)
        cubed=powers.cube(number)
        print(f'The square of {number} is {squared}')
        print(f'The cube of {number} is {cubed}')
    if __name__ =="__main__":
        run_user_interface()

    Network

  6. Socket: one end of a network "conversation" "connecting" a socket means establishing a connection between sockets in two programs.
  7. A socket contains two streams:
    1. input stream
    2. output stream
  8. client and server:
    1. client is the one that initiates the conversation
    2. server is the one that accepts the request and responds to it
  9. IP = Internet Protocol choose你想要连接的machine
  10. IP要考
  11. IP : four numbers in the range 0-255, 中间由.分割 256=2^8
  12. port端口:0-65535 65536=2^16
  13. 一些特殊的IP:127.0.0.1 一般指本机
  14. DNS(Domain name service) maps "fully-qualified domain names"域名 into IP addresses
  15. import socket
  16. socket.socket是socket里的一种type
  17. example_socket=socket.socket()
  18. example.connect((IP adress,port)) -> 要是一个(IP,port)的tuple
  19. 如果连接一个不存在的地址,会出错 getaddrinfo failed之类的
  20. 要创建pseudo files来处理IO streams input_stream=example_socket.makefile('r') output_stream=example_socket,makefile('w')
           
【ICS_32A】Lecture2Week3

【ICS_32A】Lecture2Week3

Python


@ZYX 写于2019年10月18日

Exception

try:
    the_file= file_path.open("r")
    line_count=0
    for line in the_file:
        line_count += 1
        return line_count
except OSError:
    print("That file should not be opened")
except ValueError:
    print("That file did not contain text")
finally:
    if the_file!=None:
        the_file.close()
  1. finally无论try有无出现问题,都会执行
  2. except下只会在try中出现问题时执行
  3. except (Exception):
  4. assert(Boolean Experssion)
    • 如果True,就执行下一行,如果False,就会停止并traceback一个"AssertionError"
    • 如果表达式内本来就会出bug,那么就会返回bug信息,而不会有AssertionError
  5. nested list of interger有且只有int和nested list of interger
           
【ICS_32A】Lecture1Week3

【ICS_32A】Lecture1Week3

Python


@ZYX 写于2019年10月16日

文件File

  1. open(path,mode)
  2. type(open(path,mode))=>class '_io.TextIOwrapper
  3. open.mode=mode
  4. opne.write(str),会返回buffer里所有字符串的长度
  5. open.close()
  6. write之后并不会直接写入文件,而是先存在buffer中,然后在close之前将buffer写入文件中。
  7. 与print不同,write没有ending,如果要换行,必须要/n。
  8. Path(path)
  9. Path.is_file()
  10. Path.is_dir()
  11. Path.open(mode) => open(path,mode)
  12. Path.iterdir(),迭代器,C列表
  13. list(Path.iterdir())
  14. for i in Path.iterdir()
  15. Path.name =>文件名,不带扩展名
  16. Path.suffix =>扩展名

模块module

  1. import math || math.sqrt(9)
  2. from math import sqrt || sqrt(9)
  3. from math import * || 会导致大量重名

TIPS:

  1. 查标准库
           
【ICS_32A】Lecture2Week2

【ICS_32A】Lecture2Week2

Python


@ZYX 写于2019年10月11日

列表List

  1. append
  2. extend
  3. +=
  4. list(xx) list(range(10)) list(1,2,3) list("Boo")
  5. 剪切slice: x[1:3] list[start:end+1:step=1] x[4:-2] x[-5:8 x[-5:-1] x[:-5] x[4:] x[len(x)+1:]

Type Annotation

def len_at_least(s:str,min_length:int) -> bool:
    return len(s)>=min_length
  • 但是这并不是强制的,你仍然可以传(1,"xx")进去,当然会出错
  • 元组tuple: (int,str)
  • 列表List: List[int]
  • When all else fails, you can use a string litera
  • None

    • 所有方法都会返回一个值,只不过没写的都是返回None
    • type(None) => Nonetype

File

  1. file.seek(0),回到第一行

Tips:

  1. Even though Python does not check types until run-time, THAT DOES NOT mean you shouldn't think about them until run time. That also doesn't mean you shouldn't still want to say something about them in your program.
           
【ICS_32A】Lecture1Week2

【ICS_32A】Lecture1Week2

Python


@ZYX 写于2019年10月09日

方法 function

  1. 方法参数不能多给也不能少给,因为这两种情况都会出错 givemefive() takes xx positional arguments but xxx was given
  2. 调用方法出错的Traceback顺序:
    1. 什么地方调用了该出错的方法
    2. 该出错的方法在哪里出错
    3. 出了什么错
  3. 局部变量和全局变量 Scope={local variables, global variables}
  4. 不要随便用全局变量
  5. 你可以在方法中写方法 def read_and_sum_numbers(): def read_number(): return int(input("Enter a number, or 0 to stop")) total=0 while TRUE: number = read)umber() if number==0:return total total+=number
  6. 调用方法时,会优先找同一层级的方法。也就是说,如果A方法中有local方法B,但是同时也存在和A同级的方法B,那么在A中调用方法B时,会优先调用local方法B。

    模块 module

  7. _name_=_main_
  8. 可以在module里写全局语句,他们将在module开始的时候就执行
  9. 如果模块本身有全局变量,且在部分方法中使用了该全局变量,那么这些方法将在引用该模块时出错。
  10. 方法中方法也是同理

其他

  1. 从project1开始在方法开头写docstring,来抽象的介绍方法 """ Takes an argument of any numeric type and returns its square,. """
  2. 课后可以用这个笔记和32a网上的笔记进行比较,查漏补缺
  3. 不能用type(1,2),只能x=1,2 => type(x)
  4. x,y,z="Boo" => x="B",y="o",z="o"
           
【ICS_32A】Lecture2Week1

【ICS_32A】Lecture2Week1

Python


@ZYX 写于2019年10月04日

条件与循环

if 语句

if value > 0:
    print("Positive")
elif value<0:
    print("Negative")
else:
    print("Zero")

python使用空格作为语句成分间隔符 用缩进(indention)体现各个成分块

循环

while

    while num<10:
        print(num)
        num+=1 ##没有++
    else:
        print("xxx")

在while后面可以加else,只有在while的条件不成立时才会执行 这样可以区分循环完全完成的情况和中间有break的情况,因为如果是break出来的话,是不会执行else下的命令的

格式化字符串

    print(f"Hello, (name)")

range函数

    range(6)==range(0,6,1)
    range(1,2**1024)
    r = range(10)
    r[0]==0
    r[1]==1
    r[-1]==9
    r[-10] WRONG

类似于list, 但不同于string

方法

Python自带方法

  1. print
  2. 方法本身就是一个对象,其type为function,名字为方法名 type(getsize()) <function getsize at ........>
           
已到首页—下一页>>