Python3-廖雪峰学习笔记 – Python量化投资

Python3-廖雪峰学习笔记

  • Key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value
  • dict是用空间来换取时间的一种方法,用在需要高速查找的地方。
  • dict的key必须是不可变对象
  • 通过key计算位置的算法称为哈希算法,要保证hash的正确性,作为key的对象就不能变的
  • 对象a的内容是’abc’,是指,a本身是一个变量,它指向的对象的内容才是abc’
  • 对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回
  • 函数体内部可以用return随时返回函数结果
  • 函数可以同时返回多个值,但其实就是一个tuple
  • 函数参数必须必选参数在前,默认参数在后
  • 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误
  • Python内置的enumerate函数可以把一个list变成索引-元素对
  • 在Python中,这种一边循环一边计算的机制,成为生成器:generator
  • 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
  • 函数是顺序执行,遇到return语句或者最后一行函数语句就返回
  • 而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
  • filter()的作用是从第一个序列中晒出符合条件的元素。由于filter()使用了惰性计算,所以只有在取filter()结果的时候,才会真正筛选并每次返回下一个晒出的元素
  • 返回闭包时牢记的一点就是:返回函数不要饮用任何循环变量,或者后续会发生变化的变量
  • 一个函数可以返回一个计算结果,也可以返回一个函数
  • 返回一个函数时,牢记该函数并未执行,返回函数不要引用任何可能会变化的变量
  • 在代码运行期间动态增加功能的方式,称之为装饰器(Decorator)
  • 本质上,decorator就是一个返回函数的高阶函数
  • 面向对象的设计思想是抽象出Class,根据Class创建Instance
  • 类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”
  • init方法的第一个参数永远是self,表示创建的实例本身
  • 各个实例拥有的数据都互相独立,互不影响
  • 方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据
  • 通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节
  • Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同
  • 在Python中,实例的变量名如果以__开头,就变成了一个私有变量,只有内部可以访问,外部不能访问
  • 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的slots变量没来限制该class实例能添加的属性
  • 先定义metaclass,就可以创建类,最后创建实例
  • 如果没有错误发生,可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句
  • 磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象,然后通过操作系统提供的接口从这个文件对象中读取数据,或者把数据写入这个文件对象
  • 在Python中,文件读写是通过open()函数打开的文件对象完成的。使用with语句操作文件IO是个好习惯
  • 把变量从内存中变成可存储或传输的过程称之为序列号,序列化之后,可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上
  • 线程是最小的执行单元,而进程由至少一个线程组成
  • 在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁
  • itertools模块提供的全部是处理迭代功能的函数,它们的返回值不是list,而是Iterator,只有用for循环迭代的时候才真正计算
  • IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去
  • IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达
  • TCP协议是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。
  • TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发
  • 一个IP包除了包含要传输的数据外,还包含源IP地址和目标IP地址,源端口和目标端口
  • 对于客户端,要主动连接服务器的IP和指定端口,对于服务器,要首先监听指定端口,然后,对每一个新的连接,创建一个线程或进程来处理。通常,服务器程序会无限运行下去
  • 同一个端口,被一个Socket绑定了后,就不能被别的Socket绑定了
  • 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了
  • 异步IO,当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理
  • 异步IO模型需要一个消息循环,在消息循环中,主线程不断地重复“读取消息-处理消息”这一过程
  • asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO
  • @asynicio.coroutine把一个generator标记为corountue类型,然后,我们就把这个coroutine扔到EventLoop中执行
  • 卡通射手2下载
    「点点赞赏,手留余香」

      还没有人赞赏,快来当第一个赞赏的人吧!