题目26:python内存管理机制
Python中有两种垃圾回收方式:
1. 引用计数
2. 标记后清除,这种方式可以正确地清除循环引用
Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。这也就是之前提到的Pymalloc机制。
题目27:循环计数器while和range
方法1:x='zhouyou'
for item in x:
print item
方法2:i=0
while i<len(x):
print x[i]
i+=1
方法3:
for i in range(len(x)):
print x[i]
题目28:嵌套for循环
>>>items=["aaa",111,(4,5),2.01]
>>> tests=[(4,5),3.14]
for key in tests:
ifkey in items:
printkey,"was found"
else:
printkey,"not found"
………………………………………………………………
方法二:
for key in tests:
foritem in items:
ifitem==key:
printkey,"was found"
break
else:
print key,"not found"
运行结果:(4, 5) was found
3.14 not found
题目29:python小技巧获取当前时间
import time
time.localtime(time.time()) #用time.localtime()方法,作用是格式化时间戳为本地时间
输出的结果是:time.struct_time(tm_year=2011, tm_mon=12, tm_mday=28, tm_hour=14,tm_min=52, tm_sec=14, tm_wday=2, tm_yday=362, tm_isdst=0)
time.strftime('%Y-%m-%d',time.localtime(time.time()))#格式成我们想要的时间表示形式
输出的结果:'2011-12-28'
知识扩展:
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
题目30:寻找序列的交集
>>> s1="spam"
>>> s2="spcm"
>>> [x for x in s1 if x in s2]
['s', 'p', 'm']
方法2:
>>> def intersect(seq1,seq2):
res=[]
forx in seq1:
ifx in seq2:
res.append(x)
returnres
>>> intersect(s1,s2)
['s', 'p', 'm']