背景

差不多每一个web上的程序是运行在一个叫做IP的家族通讯协议之上的。其中TCP/IP协议使电脑之间的通讯变得像读取文件一般简单。

程序通过sockets实现使用IP通讯。

HTTP的两点特质必须要了解的: - stateless 服务器记不住一个请求与下一个请求,至于用户身份的识别,请求必须每次自己携带。 - A URL can be supplemented with parameters to provide even more information.

Hello,web

现在开始创建我们的第一个Web server。

  • 等待客户端连接发送请求
  • 解析请求
  • 弄明白请求什么
  • 获取或生成数据
  • 格式化成HTML
  • 返回数据

面向对象

对象的抽象就是类,而对象的集合就是容器 list:[0,1,2] tuple:(0,1,2) dict:{0:0,1:1,2:2} set:set([0,1,2])

所有的容器都是可迭代的(iterator)。这里的迭代与枚举不同,迭代可以想象成是你去买苹果,卖家并不告诉你他有多少库存。这样,每次你都需要告诉卖家,你要一个苹果,然后卖家采取行为:要么给你拿一个苹果;要么告诉你,苹果已经卖完了。你并不需要知道,卖家在仓库是怎么摆放苹果的。

严谨地说,迭代器(iterator)提供了一个 next 的方法。调用这个方法后,你要么得到这个容器的下一个对象,要么得到一个 StopIteration 的错误(苹果卖完了)。你不需要像列表一样指定元素的索引,因为字典和集合这样的容器并没有索引一说。比如,字典采用哈希表实现,那么你就只需要知道,next 函数可以不重复不遗漏地一个一个拿到所有元素即可。

生成器又是什么?

这里,你只需要记着一点:生成器是懒人版本的迭代器。