Python Essential Reference 4th – 第3章 – 读书笔记

1、Python中,一切都是对象。

2、类型:type/class,对象/实例:instance。

3、对象按照是否可以修改,分为可变的 mutable 和不可变的 immutable 。

4、对象中可以引用其他对象,成为容器 container or collection。

5、对象有属性(值)和方法(函数)。

6、Python中的对象无法直接映射到内存空间,但是可以用内置函数id( )函数来查看:

7、操作符is和==的区别:
is是比较是否是指向同一个对象(指向的地址是否相同)
==是比较指向的值是否相等
下面的例子:

8、每个对象都有一个类型,用内置函数type查看,可用此比较两个对象是否为同一类型。
但是is用于type上,不包含继承类型。

9、如果需要判断对象类型并考虑继承情况,可以用isinstance。

10、每个对象都有一个ref-count
ref-count加一的情况:赋值给别的对象,加入list等container中。
ref-count减一的情况:del删除对象,或者引用的对象出了作用域。
使用sys.getrefcount(xx)可以获得xx对象的引用数。

12、如果希望复制给别的引用或者添加到list中的是独立的对象(新的),可以用deepcopy:

13、一个转化数据的例子,我们要把GOOG, 100, 490.10转化为对应的类型:
非常精简吧!

14、内置类型:None int long float complex bool str unicode(只有python2有) list tuple xrange dict set frozenset(不可变的set)
int值域 -2147483648 ~ 2147483647
long值域 无限(取决与内存)
float:64bit的浮点标示法。

15、sequence类型 str unicode list tuple xrange 的共用操作
S[i] index
S[i:j] slice
S[i:j:stride] slice stride是间隔
要说明的是,i和j都可以是负数,比如-1表示倒数最后一个。
len(S) S中元素的数量
min(S) S中最小的
max(S) S中最大的
sum(S,[初始值]) 累加S
all(S) 当S中都为True时返回True,否则False
any(S) 当S中有任何一个为True时返回True,否则False

16、list独有的操作
list(s) 转化为list
s.append(x) 追加元素到s末尾(如果x是list,则把x整体做为一个元素,追加到s后面)
s.extend(t) 追加list到s末尾(如果x是list,则把x打散后,做为N个元素,追加到s后面)

17、Python 2 中默认是用Byte String而不是Unicode,非常恶心。对字符串的操作不会改变原值!要么返回新的,要么是返回状态。

str.encode():将unicode的字符串str转化为其他编码,并返回。
str.decode():将非unicode编码的字符串str转化为unicode编码的,并返回。
encode和decode的参数有时候是可以省略的。

str.strip(): 移除字符串头和尾部的空白字符,所有空白!包括空格、换行、制表符等等。

18、xrange,构造i到j的数组,用于循环时候比较多。

19、map在Python中又叫做Dictionary(词典)。和数组类似,k和v可以使任意数值(k必须是不可变类型)。
【常用操作】
k in m:检查key是否在map m中。
m[k]=v: 对m的key赋值v
print m[k]: 访问m的key值k
m.has_key(k): m中是否有key k
m.setdefault(k,v): 如果m中已经有k,忽略,否则,新建k并设置数值为v

len(m):map含k-v对儿的个数
m.items():遍历所有k和v
m.keys():遍历所有k
m.values():遍历所有v

m.copy():影子拷贝,非深度拷贝!

20、set类型。set是集合,内含元素非重复,可以看作是退化的无value的map。
frozenset是不可变的set。

set和fronzenset的常用操作:
set_a.copy()
set_a.intersection(another_set):与set取交集。
set_a.union(another_set):与set取并集。

set独有的常用操作(修改的):
set_b.add(item)
set_b.clear():清空
set_b.discard(item):如果item再set_b中,移除,不在的话,无效,不报异常。
set_b.remove(item):和discard类似,不过item不在要抛出异常!

21、lamada函数,其实就是类似Java的匿名类。

Cop Six ‘s Blog

22、函数有三种:直接函数、类函数和静态函数:

23、几个内置对象:
Trackback:调用Trackback,一般异常的时候用
Generator:构造器
Slice:这个不用说了吧,lst[1:2],这种slice的时候就是用的这个对象
Ellipsis:下标相应的对象。

24、特殊函数一般是双下划线开头,如:__add__()是重载的+操作符。再如__getitem__()是重载的[]操作符。

25、与构造对象相关的特殊函数:
__new__():新建对象时。
__init__():初始化时。
__de__():del xx,操作符。

new和init一般是同时使用,等价关系是:新建对象=new + init

26、字符串相关的特殊函数:
__str__():重载的str(xx)函数。
__repr():重载的repr(xx)函数。

27、特殊函数:
__bool__():返回True或者False,用于分支判断时。
__len__():重载len()函数。
__hash__():返回一个int类型的hash值。

__lt__(self,other):重载self__ge__(self,other):重载self>=other

28、属性访问相关的特殊函数
__getattr__(self, name):访问属性,x.name
__setattr__(self,name):设置属性,x.name=yy
__delattr__(self, name):删除属性,del x.name

29、有时候,我们希望在访问x.name时,加一层逻辑(如log日志),此时可以用Descriptors。

30、
__len__(self):len(item)重载
__geitem__(self,key):item[key]重载
__contains__(self,obj):返回self中是否含obj,重载了 x in item。

31、数学操作符特殊函数

__add__(self,other): self + other
__sub__(self,other): self – other
__mul__(self,other): self * other
__div__(self,other): self / other (Python 2 only)
__truediv__(self,other) : self / other (Python 3)
__floordiv__(self,other): self // other
__mod__(self,other): self % other
__divmod__(self,other): divmod(self,other)
__pow__(self,other [,modulo]) : self ** other, pow(self, other,modulo)
__lshift__(self,other): self << other
__rshift__(self,other) : self >> other
__and__(self,other) : self & other
__or__(self,other): self | other
__xor__(self,other): self ^ other
__radd__(self,other) : other + self
__rsub__(self,other) : other – self
__rmul__(self,other): other * self
__rdiv__(self,other) : other / self (Python 2 only)
__rtruediv__(self,other) : other / self (Python 3)
__rfloordiv__(self,other) : other // self
__rmod__(self,other): other % self
__rdivmod__(self,other) : divmod(other,self)
__rpow__(self,other) : other ** self
__rlshift__(self,other) : other << self
__rrshift__(self,other): other >> self
__rand__(self,other) : other & self
__ror__(self,other): other | self
__rxor__(self,other): other ^ self
__iadd__(self,other) : self += other
__isub__(self,other) : self -= other
__imul__(self,other) : self *= other
__idiv__(self,other) : self /= other (Python 2 only)
__itruediv__(self,other) : self /= other (Python 3)
__ifloordiv__(self,other): self //= other
__imod__(self,other) : self %= other
__ipow__(self,other): self **= other
__iand__(self,other) : self &= other
__ior__(self,other) : self |= other
__ixor__(self,other) : self ^= other
__ilshift__(self,other): self < __irshift__(self,other): self >>= other
__neg__(self): –self
__pos__(self): +self
__abs__(self) : abs(self)
__invert__(self): ~self
__int__(self): int(self)
__long__(self): long(self) (Python 2 only)
__float__(self) : float(self)
__complex__(self) : complex(self)

32、with操作符。
with context [ as var]:
statements
重载函数为__enter__(self)和__exit__(self, type, value, tb)

33、dir函数,辅助函数,类似help
__dir__(self):重载了dir函数。

第三章完毕。

Leave a Reply

Your email address will not be published.