流畅的Python:第2章笔记

一、内置函数

名称说明
ord(x)获取字符x的ASCII值
divmod(x,y)返回整除和求余的元组
list.sort()返回None,因为是就地更改

列表推导的作用只有一个:生成列表

P24:可以用*运算符把一个可迭代对象拆开作为函数的参数:

t=(20,8)
divmod(20,8)  #结果(2,4)
import os
_, filename=os.path.split('/home/luciano/idrsa.pub')

_占位符可以忽略不关心的数据

用*来处理剩下的元素

>>> a, b, *rest = range(5)
>>> a,b,rest
(0, 1, [2, 3, 4])

元组不再可以作为形参放在函数的声明中:def fn(a, (b, c), d)

####2.3.4 具名元组

collections.nametuple是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类。

from collections import namedtuple
City = namedtuple('City', 'name country population coordinates')
tokyo= City('tokyo','JP', 36.933,(35.689,139.691))
print(tokyo)
print(tokyo.population)
print(tokyo[1])

输出:

City(name='tokyo', country='JP', population=36.933, coordinates=(35.689, 139.691))
36.933
JP

具名元组的几个最有用的属性:_fields类属性、类方法_make(iterable)和实例方法_asdict()

2.4.4 给切片赋值

如果把切片放在赋值语句的左边,或把它作为del操作的对象,就可以对序列进行嫁接、切除或修改。

>>> l = list(range(10))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l[2:5] = [20,30]
>>> l
[0, 1, 20, 30, 5, 6, 7, 8, 9]
>>> del l[5:7]
>>> l
[0, 1, 20, 30, 5, 8, 9]
>>> l[2:5]=[11,22]
>>> l
[0, 1, 11, 22, 8, 9]
>>> l[2::2]=[6,7]
>>> l
[0, 1, 6, 22, 7, 9]
>>> l[2:5]=100
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    l[2:5]=100
TypeError: can only assign an iterable

建立由列表组成的列表:做列表乘法运算,一定注意不要指向同一对象的引用

下列示例展示在可变和不可变序列上的作用:

>>> l = [1,2,3]
>>> id(l)
1689785560128
>>> l *=2
>>> l
[1, 2, 3, 1, 2, 3]
>>> id(l)
1689785560128
>>> t= (1,2,3)
>>> id(t)
1689785500672
>>> t *=2
>>> t
(1, 2, 3, 1, 2, 3)
>>> id(t)
1689785072800

2.6 序列的增量赋值

>>> t = (1,2,[30,40])
>>> t[2] +=[50,60]
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    t[2] +=[50,60]
TypeError: 'tuple' object does not support item assignment
>>> t
(1, 2, [30, 40, 50, 60])

从此例子得到3个教训:

  • 不要把可变对象放在元组里面

  • 增量赋值不是一个原子操作。

  • 查看Python的字节码

    
    

2.8 用bisect来管理已排序的序列

bisect 模块包含两个主要函数:bisect和insort

  • bisect(haystack, needle):把needle插入这个位置后,haytstack还能保持升序。
  • insort(seq, item): 把变量item插入序列seq中,

2.9 数组

浮点型数组的创建、存入文件和从文件读取的过程

from array import array
from random import random
floats = array('d',(random() for i in range(10**7)))
print(floats[-1])
fp = open('floats.bin', 'wb')
floats.tofile(fp)
fp.close()
floats2= array('d')
fp = open('floats.bin','rb')
floats2.fromfile(fp,10**7)
fp.close()
print(floats2[-1])
print(floats2 == floats)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚蓝慕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值