《Python编程金典》读书笔记 之笔记

最近看了《Python编程金典》读书笔记 , 非常感谢作者的总结。我自己也从中摘抄了一点自己觉得对自己有用的部分,很多地方没有摘抄是因为,暂时不理解或者用不到。

存在此处,作为笔记。


1)默认参数必须全部靠右。省略非靠右的参数是语法错误。


2)创建序列:aString = "";aList = [];aTuple = ()。列表是可变序列,字符串和元组是不可变序列。


3)python提供一种特别的机制来防止任意访问数据。在属性名附加双下划线前缀。
python解释器会对属性执行 “名称重整”。如self.__hour,python会创建一个_Classname__hour的属性


4)属性名以单下划线开头,虽然在python语法中没有特殊的含义,但单下划线是python 程序员使用类时约定使用的符号,表明程序员不希望类的用户直接访问属性。
以单划线开头的属性揭示一个类的接口的相关信息。类如果定义了此类属性,它的客户就只能通过类提供的访问方法来访问并修改属性值。
如果不是这样做,通常会导致程序执行期间出现不可预料的错误。

5)利用访问方法控制对属性的访问(尤其是写访问)有助于确保数据完整性。


6)链式比较表达式(0 <= a < 10)的效率比非链式表达式( a >= 0 and a < 10)更高,因为链式比较表达式中的每个条件都只执行一次


7)前面介绍客户访问对象属性的方法有两种,一种是客户可直接访问属性(使用点访问运算符):
另外,也可通过客户定义的访问方法来访问属性。这一节讨论另外一种技术---定义特殊方法,自定义直接属性访问的行为。
python提供了一系列特殊方法,类可定义这此方法,以控制点访问运算符操纵类对象的方式。如:
      __delattr__ 客户删除一个属性时执行(例如 del anObject.attribute)
      __getattr__ 客户访问一个属性名,但在对象__dict__属性中找不到这个名称时执行(例如anObject.unfoundName)
      __setattr__ 客户将值指派给对象的属性时执行(例如 anObject.attribute = value)
         1.

8)如有必要,请为你创建的模块提供test函数,这些函数可确保模块正常工作,而且能通过演示模块的工作方式,向客户提供额外的信息。如以下语句:
if __name__ == "__main__":
test()

如果另一个程序导入模块,__name__的值就会是模块名,而test函数不会执行。如果模块作为单独的程序执行,__name__的值是“__main__”,test函数就会执行。

9)所有类都可定义“静态方法”。静态方法可由一个客户调用,即使不存在类的任何对象。通常,静态方法是类的一个实用方法,不需要类的一个对象就能执行。
一个类如果想把方法指定为静态的,就必须向内建函数staticmethod传递方法的名称。
再为函数调用返回的值绑定一个名称。静态方法不将self指定为第一个参数。这样一来,即使没有类的对象,也能调用静态方法。

10) 要在python中建立具有TCP和流套接字的简单服务器,需要使用socket模块。利用该模块包含的函数和类定义,可生成通过网络通信的程序。建立这个连接需要6个步骤:
  第一步是创建socket对象。调用socket构造函数。如:
  socket = socket.socket( family, type )
  family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
  type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。

  第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:
  socket.bind( address )
  由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。

  第三步是使用socket套接字的listen方法接收连接请求。
  socket.listen( backlog )
  backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。

  第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。
  connection, address = socket.accept()
  调用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。

  第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。

  第六步,传输结束,服务器调用socket的close方法关闭连接。
 
 11) 端口号范围在0--65535之间,很多操作系统为系统服务保留了1024以下的端口号。应用程序在得到特别授权后才能使用这些保留端口号。服务器端应用程序一般不要把1024以下的端口号指定为连接端口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值