《Python核心编程》读书笔记

《Python核心编程》读书笔记涵盖Python对象、数字、序列、映射、集合类型、条件、网络编程、多线程和GUI等内容。深入讲解了Python的身份、类型、标准类型操作符,以及异常处理、文件I/O、面向对象编程、网络通信和数据库编程等关键主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


第一章、Python对象

1.1、Python对象

Python使用对象模型来存储数据。
所有的Python对象都有三个特性:身份、类型和值。
身份可以使用内建函数id()得到;类型可以使用内建函数type()查看。

1.2、标准类型

  • 数字
  • 整形 Integer
  • 布尔型 Boolean
  • 长整形 Long integer
  • 浮点型 Floating point real number
  • 复数型 Complex number
  • 字符串 String
  • 列表 List
  • 元组 Tuple
  • 字典 Dictionary

1.3、其他内建类型

  • 类型
  • Null 对象
  • 文件
  • 集合/固定集合
  • 函数/方法
  • 模块
1.3.1 类型对象和type类型对象

例如

>>> type(21)
<type 'int'>
1.3.2 None Python的None对象

None不支持任何运算也没有任何内建方法。

所有标准对象均可用于布尔测试,同类型的对象可以比较大小。每个对象天生具有布尔值。
下列对象的布尔值是False。
* None
* False(布尔类型)
* 所有值为0的数
* 空字符串””
* 空列表 []
* 空元组 ()
* 空字典 {}

1.4、内部类型

  • 代码
  • 跟踪记录
  • 切片
  • 省略
  • Xrange
注:异常是用类来实现的
1.4.1、代码对象

代码对象是编译过的python源代码片段,是可执行对象。
通过调用compile()可以得到代码对象。
代码对象可以被exec命令或eval()内建函数来执行。

1.4.2 帧对象

帧对象表示python的执行栈帧。
帧对象包含python解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码,本地及全局名称空间字典及当前指令等。
每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个C栈帧。
用到帧对象的一个地方是跟踪记录对象。

1.4.3 跟踪记录对象

代码出错时,python会引发一个异常。
如果异常未被捕获和处理,解释器会退出脚本运行,显示诊断信息。

Traceback (innermost last):
    File "<stdin>", Line N? in ???
ErrorName: error reason

异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。
如果有异常处理程序,处理程序就可以访问这个跟踪记录。

1.4.4、切片对象

切片语法:
* seqnence[start1:end1, start2:end2]
* sequence[…, start1:end1]
* slice() 内建函数
* sequence[start:end:步进值] 步进切片

>>> foostr = 'abcde'
>>> foostr[::-1]
'edcba'
>>> foostr[::-2]
'eca'
>>> foolist = [123, 'xba', 342.23, 'abc']
>>> foolist[::-1]
['abc', 342.23, 'xba', 123]
1.4.5 省略对象

省略对象用于扩展切片中,起记号作用。
这个对象在切片语法中表示省略号。类似于Null对None,省略对象有一个唯一的名字Ellipsis,它的布尔值始终为True。

>>> print(...)
Ellipsis
1.4.6、XRange对象

内建函数xrange()会产生一个Xrange对象。
时range()函数的兄弟版本。

1.5、标准类型操作符

5.1、对象值的比较

所有的内建类型均支持比较运算。

1.5.2、对象身份比较

python提供了is和is not操作符来测试两个变量是否指向同一个对象。

a is b
id(a) == id(b) #两个表达式的意义相同
注:整形对象和字符串对象是不可变对象,所以python会缓存它们。
>>> a = 1
>>> id(a)
1234567
>>> b = 1
>>> id(b)
1234567
>>> c = 1.0
>>> id(c)
2345678
>>> d = 1.0
>>> id(d)
2345689

另外字符串似乎不会缓存,此处待验证。

1.5.3 布尔类型

布尔逻辑操作符 and or not。
三个操作符中not的优先级最高。

1.6、标准类型内建函数

  • cmp()
  • type()
  • str() repr()
    <ul><li>str()和repr()或反引号操作符(
    )可以以字符串的方式获得对象内容、类型、数值属性等信息。
  • ininstance()
  • 1.7、类型工厂函数

    所有的内建函数如今都是类。
    在此基础上,原来的内建转换函数如int()、type()、list()等,都成了工厂函数。
    意即虽然看上去像函数,实质上是类。
    调用它们时,实际上生成了该类型的一个实例,就像工厂生产货物一样。
    例如
    * int() long() float() complex()
    * str() unicode() basestring()
    * list() tuple()
    * type()
    * dict()
    * bool()
    * set() fronzenset()
    * object()
    * classmethod()
    * staticmethod90
    * super()
    * property()
    * file()

    1.8、标准类型的分类

    数据类型存储模型更新模型访问模型
    数字标量不可更改直接访问
    字符串标量不可更改顺序访问
    列表容器可更改顺序访问
    元组容器不可更改顺序访问
    字典容器可更改映射访问

    1.9、不支持的类型

    • byte char
    • 指针
    • int vs short vs long
      • 实际上python的整形相当于C语言的长整形
    • float vs double
      • python的float实际相当于双精度类型

    第二章、数字

    2.1、简介

    删除数字对象

    del i
    del a, b, c
    2.1.1、复数

    real+imagj
    复数的内建属性

    属性描述
    num.real实部
    num.imag虚部
    num.conjugate()共轭复数
    2.1.2、除法

    地板除

    >>> 1 // 2
    0
    >>> -1 // 2
    -1
    2.1.3、取余
    x-(math.floor(x/y)*y)

    对于复数,取余仅取其实数部分。

    2.1.4、幂运算
    a ** b

    2.2、内建函数与工厂函数

    功能函数
    * abs()
    * corece()
    * 数据类型转换
    * divmod()
    * 将除法与取余运算结合,返回一个包含商和余数的元组。
    * 对复数来说,商部分返回 ath.floor((num1/num2).real)
    * pow()
    * round()
    * 按四舍五入进行取整

    2.3、相关模块

    模块介绍
    decimal十进制浮点数运算类Decimal
    array高效数值数组(字符、整型、浮点型等)
    math/cmath标准C库数学运算函数。常规运算在math模块,复数运算在cmath模块
    operator数字操作符的函数实现。如tor.sub(m,n)等价于m-n
    random多种伪随机数生成器

    另外还有著名的第三方包,如
    scipy

    |random模块常用函数|介绍|
    |randint()|两个整型参数,返回二者之间的随机整型|
    |randrange()|接受同range()同样的参数,随即返回range([start],stop,[step])结果的一项|
    |uniform()|同randint(),但是返回的时浮点型|
    |random()|类似于uniform(),只是下限恒等于0.0,上限恒为1.0|
    |choice()|随机返回给定序列的一个元素|


    第三章序列

    序列包括字符串、列表、元组。


    第四章、映射和集合类型

    4.1、映射类型:字典

    字典是python语言中唯一的映射类型。

    第五章、条件和集合

    第六章、文件输入和输出

    第七章、错误和异常

    第八章、函数和函数式编程

    第九章、模块

    第十章、面向对象编程

    第十一章、执行环境

    第十二章、正则表达式

    12.1、引言

    正则表达式(RE)

    12.2、正则表达式使用的符号和字符

    记号说明示例
    literal匹配字符串的值foo
    re1|re2匹配正则表达式re1或者re2foo|bar
    .匹配任何字符(换行符除外)b.b
    ^匹配字符串的开始^Dear
    ||/bin/sh | 匹 配 字 符 串 的 结 尾 | / b i n / ∗ s h
    *匹配前面出现的正则表达式零次或n次[A-Za-z0-9]*
    +匹配前面出现的正则表达式一次或多次[a-z]+\.com
    ?匹配前面出现的正则表达式零次或一次goo?
    {N}匹配前面出现的正则表达式N[0-9]{3}
    {M,N}匹配重复出现M次到N次的正则表达撒[0-9]{5,9}
    […]匹配字符组里出现的任意一个字符[aeiou]
    [..x-y..]匹配字符x到y中的任意一个字符[0-9],[A-Za-z]
    [^..]不匹配此字符集中出现的任何一个符号,
    包括某一范围内的字符
    [^aeiou],[^A-Za-z0-9_]
    (*|+|?|{})?用于匹配上面出现的任何“非贪婪”。版本重复匹配次数符号.*?[a-z]
    (…)匹配封闭括号中正则表达式,并保存为子组(0-9){3})?,f(oo
    特殊字符
    \d匹配任何数字,和[0-9]一样(\D是\d的反义:任何非数字符)data\d+.txt
    \w匹配任何数字字母符号,和[A-Za-z0-9_]相同(\W为其反义)[A-Za-z_]\w+
    \s匹配任何空白字符,和[\n\t\v\f]相同(\S为其反义)of\sthe
    \b匹配任何单词边界(\B为其反义)\b\The\b
    \nn匹配已保存的子组(请参考上面的正则表达式符号(…)price:\16
    \c逐一匹配特殊字符c., \, *
    \A(\Z)匹配字符串的起始(结束)\Adear

    12.3、正则表达式和Python语言

    12.3.1 re模块:核心函数和方法
    函数/方法描述
    函数
    compile(pattern, flags=0)对正则表达式pattern进行变异,flags是可选标识符,并返回一个regex对象
    re模块的函数和regex对象的方法
    match(pattern, string, flags=0)尝试用正则表达式模式pattern匹配字符串string,flags是可选的,
    若匹配成功,则返回一个匹配对象,否则返回None
    search(pattern, string, flages=0)搜索string中表达式模式pattern的第一次出现
    findall(pattern, string[, flags])搜索pattern的所有出现,返回一个匹配对象的列表
    fingiter(pattern, string[, flags])同findall(),但是返回的是迭代器
    split(pattern, string, max=0)根据pattern中的分隔符把string分割为一个列表,返回匹配成功的列表
    sub(pattern, repl, string, max=0)把string中匹配pattern的地方替换为repl,返回替换次数的数值
    匹配对象的方法
    group(num=0)返回全部匹配对象
    groups()返回一个包含全部匹配的子组的元组(若没有成功,返回一个空元组)
    12.3.2 搜索与匹配

    即match与search函数的比较。
    例如

    >>> m = re.match('foo', 'seafood')
    >>> if m is not None: m.group()

    会提示没有匹配成功,因为foo虽然在字符串seafood中,但是不是对应开头。
    使用search函数会匹配成功。


    第十三章、网络编程

    13.1、引言

    13.1.1 客户端、服务器架构

    服务器存在的目的是等待客户端的请求,给这些客户服务,然后再等待其他的请求。

    13.2.套接字

    13.2.1、套接字也被称作进程间通讯,或IPC。

    套接字有两种,基于文件型的和基于网络型的。
    * AF_UNIX
    * AF_INET
    * AF_NETLINK
    python只支持AF_UNIX,AF_NETLINK,AF_INET

    13.2.2、套接字地址

    端口号范围是0-65535.
    可以通话/etc/services文件获得保留的端口号。

    13.2.3、面向连接和无连接
    13.1、面向连接

    主要协议是传输控制协议(即TCP)。

    13.2、无连接

    协议是用户数据报协议(即UDP)。

    13.3、网络编程

    使用socket模块。

    13.3.1、socket()模块函数
    socket(socket_family, socket_type, protocol=0)

    例如,创建一个TCP/IP的套接字,

    tcpSock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )

    若创建一个基于UDP/IP的套接字,

    udpSock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
    13.3.2套接字对象方法
    函数描述
    服务器端套接字函数
    s.bind()绑定地址到套接字
    s.listen()开始TCP监听
    s.accept()被动接受TCP客户端连接,(阻塞式)等待连接的到来
    客户端套接字函数
    s.connect主动初始化TCP数据
    s.connect_ex()connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
    公共用途的套接字函数
    s.recv()接收TCP数据
    s.send()发送TCP数据
    s.sendall()完整发送TCP数据
    s.recvfrom()接收UDP数据
    s.sendto()发送UDP数据
    s.getpeername()连接到当前套接字的远端的地址
    s.getsocketname()当前套接字的地址
    s.getsocketopt()返回指定套接字的参数
    s.setsocketopt()设置指定套接字的参数
    s.close()关闭套接字
    面向模块的套接字
    s.setblocking()设置套接字的阻塞与非阻塞模式
    s.settimeout()设置阻塞套接字操作的超时时间
    s.gettimeout()得到阻塞套接字操作的超时时间
    面向文件的套接字函数
    s.fileno()套接字的文件描述符
    s.makefile()创建一个与该套接字关联的文件对象
    13.3.3、创建一个TCP服务器

    示例如下。

        ss = socket()           # 创建服务器套接字
        ss.bind()               # 把地址绑定到套接字上
        ss.listen()             # 监听连接
        inf_loop:               # 服务器无限循环
            cs = ss.accept()    # 接受客户端连接
        comm_loop:              # 通信循环
            cs.recv()/cs.send() # 对话
        cs.close                # 关闭客户端套接字
    ss.close                    # 关闭服务器套接字

    所有的套接字都用socket.socker()函数来创建。
    服务器需要“坐在某个端口上“等待请求。所以它们必须绑定到一个bending的地址上。
    由于

    HOST变量设为空,表示bind()函数可以绑定在所有有效的地址上。

    13.3.4、创建TCP客户端
    cs = socket()               # 创建客户端套接字
    cs.connect()                # 尝试连接服务器
    comm_loop:                  # 通信循环
        cs.send()/cs.recv()     # 对话
    cs.close()                  # 关闭客户端套接字
    13.3.5、运行客户端与服务器

    先运行服务器端。

    13.3.6、创建一个UDP服务器
    ss = socket
    ss.bind()
    inf_loop:
        cs = ss.recvfrom()/ss.sendto()
    ss.close()
    13.3.7、创建一个UDP客户端
    13.3.8、执行客户端和服务器
    13.3.9、Socket模块属性

    13.4、SocketServer属性

    13.5、Twisted框架

    第十四章、网络客户端编程

    第十五章、多线程编程

    第十六章、图形用户界面编程

    第十七章、Web编程

    第十八章、数据库编程

    第十九章、扩展Python

    第二十章、其他

    未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值