您的位置:首页 > 编程语言 > Python开发

学习日志---python继续

2015-08-28 10:50 441 查看
内存管理:
使用垃圾回收机制,垃圾回收的策略是引用技术(reference counting);
对象的三个要素:identity内存地址(不可变);type类型(不可变);value值。
id()这个函数是返回这个对象的地址,用于判断是否是同一个函数。如id("aaa")

引用计数:
一块内存地址被指向的次数,如果为0的话就说明回收这块空间。

整形缓冲池:
整形值预先进行了分配,不会被回收。缓冲池的换位可以通过修改源码来改变,根据具体项目来设定,提高效率。

def是同一个,a=def class是不同的对象,a=class(),这个是分配新的内存;

is语句:
判断是否是同一个对象,判断是否是指向同一个内存!!

序列中的元素可以用下标去访问,从0开始,也可以从负数做下标,-1序列尾部的元素,如可以l[-1]取得l中的最后一个元素。

连接操作:
序列可以用+号操作,使两个序列合在一起,这种是创建一个新的序列。
extend方法只支持list,这个是在原序列基础上加长。如a.extend(b),a加长,变为a+b;

append方法只支持list,添加单个元素;
del a[2],只支持list,删除a中2位置的内容;

[序列]*数字,可以实现复制,返回一个新的序列;

切片slice:

[起点:终点:步进],包括起点,不包括终点;如a[::2],表示a序列中,取步进为2的值。

特殊情况:
当步进为负数时,走的方向相反,从尾部为起点。负号表示方向。可以输出反向的字符串作用。
a="string"
print a
print a[::-1]
上面输出正向,下面输出反向。

类型转换:

实际上是创建了一个新的对象,通过id()这个函数可以去分析得到。
list和turple都是函数,工厂函数,可以对序列进行转换。
a=[1,2,3]
print tuple(a)


序列的内建函数:不是方法,是函数,这些都是函数,不是对自身序列的改变,而是重新建一个;
enumerate(iter):该方法生成键值组合的可迭代对象,key是指名位置;
len():返回长度;

reversed(seq):返回一个方向序列,用在循环中;

sorted(序列,func=,key=,reverse=):返回排序后的列表;

http://www.cnblogs.com/65702708/archive/2010/09/14/1826362.html
http://www.cnblogs.com/woshitianma/p/3222989.html
lambda是把序列中的每一项当作一个整体,用下标的方式去指明,如果是一个类,则可以用类中的元素去比较,key是指传一个参数进去的函数,输出作为比较的依据;func是传递两个参数,两两比较返回序列。

sum(集合,起始值)求和;

for head,value in enumerate(a):
print head,"  ",value

print len(a)

for i in reversed(a):
print i

print sorted(a,reverse=True)

print sum(a)


字符串:
字符串是不可变的序列,任何一点改变都是创建新的字符串,有两种字符串,有普通字符串和unicode字符串,推荐使用unicode字符串!
因为每次+都会创建新的字符串,为了避免很多的临时字符串,使用join方法
sl=["hello","we","love","python"]
sl = " ".join(sl)
print sl
以空格作为中间符号把单个字符串连起来。

Unicode编码

utf-8是可变的,一字节到四字节,一般一个汉字占三个字节,也可以四个

utf-16和utf-32,分别表示最少占用16位和32位。

元组真的不能被修改吗?

序列实际上是容器,存的都是元素的地址

a=(1,2,3,4,[1,2,3,4])
a[4].append(5)
print a
a可以改内部的东西,因为它认为其地址没变,即没变

拷贝
浅拷贝和深拷贝
浅拷贝:切片,序列方法。。
内层的序列不会重新生成,而是和以前的共用一个。
深拷贝:copy模块的deepcopy函数
内外的序列都是重新生成的
c=copy.deepcopy(a)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python