风火编程--bytes, memoryview, unicode规范化,运算符包operator,函数式包functools: partial, reduce, itemgetter

《流畅的python》读书笔记(三)

4.2python3的字节类型
python3的bytes或bytearrary是不可变数据了理性, 它的元素是0-255之间的整数, bytearray对象没有字面量显示句法.

bytres的索引取到整数,bytearray的索引取到bytes, bytearray切片取到bytearray对象.

内存视图
import struct
ftm = “3s3sHH”
with open(“path”, “rb”) as f:
mv = memoryview(f.read())
header = mv[:10]
t, h, *o = struct.unpack(ftm, header)
print(t,h, o)
del mv # 释放引用

表情符使用utf-16编码

二进制转str直接编码encode

decode(“utf-8”)可以解码任意编码格式而不报错, 但未必都可用,如果无法解码会返回乱码,
乱码的BOM(字节序标注)包含一些编码信息

在encode的时候会报错.

为确保文件跨平台可用, 打开文件的时候应制定encoing=“utf-8”

open(“path”, “r”)默认返回TextIOWrapper文件对象, 通过encoding属性查看编码方式

4.6 unicode规范化

from unicodedata import nomalize
s = nomalize('NFC', str)

5.4 可调用对象
内置函数和内置方法是使用C语言实现的

5.5 自定义可调用对象的类
实现__call__()的对象可调用
callable(obj)判断obj是否是可调用对象

5.7仅限关键字参数
形参中出现单独的,*,代表后面的参数必须使用关键字参数.

5.8 获取关于参数的信息
内省
app对象会自动获取视图函数锁需要的参数,然后从request中取出来传递给视图函数.
如果request中没有该参数,会抛出参数丢失的missing异常.

5.9 函数注解
示例:
定义函数func,
形参a为str,
b为大于0的int, 默认值为1,
返回值为str

def func(a: str, b: 'int>0' =1) -> str:
    return a + str(b)

r= func("is: ", 3)
print(r)

5.10 函数式编程的包
运算符在operator包中,
高阶函数在functools包中,
redfuce用来进行累计运算, partial用来固化部分参数|(类似闭包)
累计运算

from functools import reduce
from operator import mul
r = reduce(mul, range(1,6))
print(r)

冻结部分参数

from operator import mul
from functools import partial
my_mul = partial(mul, 3)
r = my_mul(5)
print(r)

取元素的元素
itermgetter替代lambda

from operator import itemgetter
li = [(3,3),(1,1), (2,2)]
r = sorted(li, key=itemgetter(1))
print(r)

函数的内省使用six库

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值