Fluent Python笔记

python特殊方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from math import hypot

class Vector:
def __init__(self, x=0, y=0):
self.x = x
self.y = y

def __repr__(self): # 交互式控制台和调试程序,表示字符串,__str__被str()调用
return 'Vector(%r, %r)' % (self.x, self.y)

def __abs__(self):
return hypot(self.x , self.y)

def __bool__(self): # 如果不存在__bool__,那么bool(x)会调用x.__len__(),如果0,返回False,否则True
return bool(abs(self))

def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)

def __mul__(self, scalar):
return Vector(self.x * scalar)

其他Python魔术方法指南

列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
board = [['_'] * 3 for i in range(3)]
board = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]

# 一个谜题
t = (1, 2, [30, 40])
t[2] += [50, 60]
# 会发生什么呢?
t = (1, 2, [30, 40, 50, 60]) # 同时报元组不可修改的错

sorted(list, key=str.lower, reverse=True)

import bisect #二分的方法查找插入
bisect.bisect()
bisect.insort()

# 当列表不是首选时,其他的数据结构array, set, deque
from array import array #数组
from random import random
floats = array('d', (random() for i in range(10*7))) #类型码d是双精度浮点数组
floats.tofile()
floats.fromfile()

# 内存视图,在数据结构之间共享内存
numbers = array.array('h', [-2, -1, 0])
memv = memoryview(numbers)
len(memv) -> 5

from collections import deque
dq = deque(range(10), maxlen=10)
dq.rotate(3) # 队列旋转
dp.appendleft(-1)
dp.extend([11, 22])
dp.extendleft([8, 9])

# 其他queue queue, multiprocessing, asyncio, heapq

字典


----------本文完,感谢您的阅读----------