一个小项目中的Python中的性能优化细节——(下)其他的小细节,减少调用、if判断的顺序

本文探讨了在代码优化中减少间接访问、利用 if 判断条件和避免函数调用等策略,通过实例展示了这些技巧如何提高代码效率,节省运行时间。同时指出,即使是细微的改动,如改变 if 条件的顺序,也可能带来显著的性能提升。文章还强调了函数调用的开销,并提供了简化代码连接的实例,进一步说明了如何在不影响功能的前提下提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、减少间接访问

<span style="white-space:pre">			</span>D_Ascii = { } #this will save time about 0.1s
			D_Freq = { } #avoid create&destroy a pointer in for loop 
			for index_Word in range(len(lines_Word)-2):
				index_AsciiHash = ord(lines_Word[index_Word][0])  #this one costs 1.4 s
				str_Key = lines_Word[index_Word][0:-1] + str_const_GLUE + lines_Word[index_Word+1][0:-1] #costs 1.4s
				#str_Key = f_glue_word(lines_Word[index_Word][:-1],lines_Word[index_Word+1][:-1]) #costs  2.5s
				str_NextWord = lines_Word[index_Word+2][:-1] #costs 0.5s
				D_Ascii = self.list_AsciiHash[index_AsciiHash] #datatype -- dict_AciiHash_Dict
				D_Freq = self.list_KeyFreq_Dict_asciihash[index_AsciiHash] #costs 0.5s

在上面的例子中,D_Ascii和D_Freq的定义就是为了加入一个二级hash访问的临时变量
看似不经意的举动,会提高多少速度呢?
大约0.2秒。
一个典型的时间换空间的例子。这还是简单的间接访问,如果是复杂的访问则会节省更多的时间了~!
即简化了代码的长度,又提高了效率,何乐而不为呢?

二、if判断条件也会影响时间?

				if str_Key not in D_Ascii: #put "not in" in front of "in",save 0.4s, because in will cause extra judge
					D_Ascii[str_Key] = { str_NextWord : 1 }#costs 1.4s
					D_Freq[str_Key] = 1#555
					
				else:
					if str_NextWord in D_Ascii[str_Key]:#666
						D_Ascii[str_Key][str_NextWord]+=1#666
					else:#666
						D_Ascii[str_Key][str_NextWord]=1#666
					D_Freq[str_Key] += 1#555

上面这段代码,用的是if not in 而不是 if in, 一般都觉得这没什么嘛,不就是换个顺序?
但是实际在测试的时候,我却发现,if not比if要节省了0.4秒的时间!
为何会这样?
。。。。。。。。。。。。。。。
我也没找到合理的解释………………

三、函数调用也会消耗资源!

        在性能分析的时候,我发现某些函数竟然调用了200W次之多!
        其中有一个函数的作用是在A和B中间加入一段字符串“_+_”。为了简化代码我专门弄了一个函数,没想到这个函数竟然消耗的时间竟然达到3秒!
        后来我把这个函数去掉,直接进行连接,发现只需要消耗1.3秒!
总结1:函数调用,能省则省。

        同样的一个例子,str的方法strip()。
       我需要处理的是一个末尾带'\n'的字符串,那么对于这个操作,我只需要使用word[0:-1]即可,并不需要使用strip()
       因为这个函数有一些其他功能,包括去头去尾!
       那么节省了多少时间呢?一半,1.5s!




(完)我对这篇文章不太满意,因为我发现用数据库不需要经过这么痛苦的数据处理过程。唉…
           这种感觉就跟…………
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值