【性能测试】【python】try_except写法与类golang函数返回式写法在性能上的比较

结论

在会报错的情况下,仿golang式返回报错的性能比try写法要快18%左右,
不会报错的时候仿golang式返回报错的写法仅比try式写法快1.8%左右。
(采用的算法为(a-b)/b,其中a>bb为"比较对象",a为"被比较对象")

环境

  • python 3.11.5
  • win10x64-22H2
  • IDE: pycharm-comunity
  • cpu: i5-10200H

优劣

在发生报错的情况下,仿golang式写法快一点,但必须判定明确知道返回的错误类型,不能用其父类当做判定条件;同时该写法允许在获取错误的同时获得函数的其他返回参数。
try_except式写法稍慢,except条件可以以返回错误类型的父类作为判定条件;同时该写法无法在执行函数后直接获取来自报错函数的返回内容。

题外话

显然,如果希望函数在返回报错的同时返回其他内容并且后续代码需要来自这个函数异常下返回的有效信息,则仿golang式不仅效率略高,同时也能满足该设计需求。

用例代码(分块)

定义测试运行次数

times = 100000000

try_except写法用例

def RAIS():
	raise Exception()
def exc1():
	try:
		RAIS()
	except Exception:
		...

仿golang返回式写法

def RETU():
	return Exception()
def exc2():
	if (e:=RETU())and type(e) == Exception:
		...

运行时间比较代码

import time
t=time.time()
for i in range(times):
	exc1()
print("exc1 =",time.time()-t)
t=time.time()
for i in range(times):
	exc2()
print("exc2 :",time.time()-t)

用例代码(完整拼接)

times = 100000000

def RAIS():
	raise Exception()
def exc1():
	try:
		RAIS()
	except Exception:
		...

def RETU():
	return Exception()
def exc2():
	if (e:=RETU())and type(e) == Exception:
		...

import time
t=time.time()
for i in range(times):
	exc1()
print("exc1 =",time.time()-t)
t=time.time()
for i in range(times):
	exc2()
print("exc2 :",time.time()-t)

后话

把函数RAIS()RETU()中的raise改为...return Exception()改为return None,再把times后面加个零后,用来比较无报错情况下两者的运行效率,可以得出结论:

返回式写法比try的写法要快1.8%左右,相差不大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值