python选项卡中文详细说明_Python范围查找选项卡

“有一个字典,每一条指令都有一个词条是可能的,但也是非常浪费的。”你认为用这种语言编写的程序会有数百万条指令的长度吗?如果没有,这正是我推荐的。不要过早地优化。大多数人将这句格言理解为绩效,但它也适用于资源使用。在

如果您确实需要优化空间,假设您使用的是python2.6或更高版本,我建议使用bytearray。顾名思义,它是一个字节数组,因此可以表示0-255的值。数组中的每一项都表示对应行上的语句数。要将指令号转换回行号,请执行以下操作:instcounts = bytearray((2, 4, 6, 3, 1, 1, 5, 2, 3))

def getline(instnumber):

count = line = 0

while count <= instnumber and line < len(instcounts):

count += instcounts[line]

line += 1

return line # conveniently, this will be 1-indexed :-)

getline(15) # tells me instruction 15 is on line 5

与torek的回答相比,这种方法的优势在于,它在每行源代码中只存储一个字节的基本相同的信息:比列表更高效。您需要做一些额外的工作来计算行号,但实际上,即使在非常大的文件上,您也不会注意到,而且您只会在打印错误消息时运行它,这几乎不是一个速度关键函数。上面的函数在代表1000000行的bytearray上需要大约十分之一秒的时间,这是在运行了4年的macpro的windowsxp虚拟机上python3.1下未优化的代码。在

需要内存吗?1087199字节,大约是torek解决方案中list所需的四分之一,不包括列表中引用的int对象,每个都是14个字节(CPython重用一个小整数对象池,因此如果要为整数使用额外的内存,那么小文件可能不会占用太多内存)。在

顺便说一句,CPython使用了一个非常相似的方案(参见任何函数的func_code.co_lnotab或{})。在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值