首页 > 其他分享 >try的简单性能测试

try的简单性能测试

时间:2024-08-24 22:26:00浏览次数:12  
标签:eafp return increment lbyl 性能 try 75 测试 print


# 1.测试对函数类型检查使用捕捉异常和if先判断方式的时间差
from timeit import timeit

def increment_lbyl(x):
    if isinstance(x, int):
        return x + 1
    elif isinstance(x, str) and x.isdigit():
        return int(x) + 1
    else:
        pass
        # raise ValueError("Invalid input")

def increment_eafp(x):
    try:
        return int(x) + 1
    except (TypeError, ValueError):
        pass
        # raise ValueError("Invalid input")

t_lbyl_75 = timeit(setup="from __main__ import increment_lbyl", stmt="increment_lbyl(75)", number=10_000_000)
t_eafp_75 = timeit(setup="from __main__ import increment_eafp", stmt="increment_eafp(75)", number=10_000_000)

print(f"lbyl_75: {t_lbyl_75:.4f} seconds")
print(f"eafp_75: {t_eafp_75:.4f} seconds")

t_lbyl_75_s = timeit(setup="from __main__ import increment_lbyl", stmt="increment_lbyl('75')", number=10_000_000)
t_eafp_75_s = timeit(setup="from __main__ import increment_eafp", stmt="increment_eafp('75')", number=10_000_000)

print(f"lbyl_'75': {t_lbyl_75:.4f} seconds")
print(f"eafp_'75': {t_eafp_75:.4f} seconds")

t_lbyl_invalid = timeit(setup="from __main__ import increment_lbyl", stmt="increment_lbyl('invalid')", number=10_000_000)
t_eafp_invalid = timeit(setup="from __main__ import increment_eafp", stmt="increment_eafp('invalid')", number=10_000_000)

print(f"lbyl_invalid: {t_lbyl_invalid:.4f} seconds")
print(f"eafp_invalid: {t_eafp_invalid:.4f} seconds")

# lbyl_75: 0.4216 seconds
# eafp_75: 0.5533 seconds
# lbyl_'75': 0.4216 seconds
# eafp_'75': 0.5533 seconds
# lbyl_invalid: 0.7271 seconds
# eafp_invalid: 5.6974 seconds

# 当前版本Python 3.11.0 可以看到使用异常捕获方式始终比先判断方式慢一点,可见异常捕获会有额外的性能损耗
# 但是说实话二者差距非常小,只有异常时,异常捕获方式明显占用更多时间,但也不到10倍差距
# 最重要的是,这是在1千万次循环的情况下暴露出来的,实际上二者的差距非常小
# 如果基本保证函数输入大部分是正确的,那么使用异常捕获方式可读性更好、更易于维护




# 2.即使函数return了,finally也会执行,那么会暂时保留局部变量吗,以及finally修改返回值内容影响返回
def f(x):
    try:
        x += 1
        return x
    finally:
        x = 0
        return x
    
print(f(0))

# amazing啊,这个函数返回的是0,去掉finally里的return才能返回1
# 可见确实函数return后了也要执行finally,且finally甚至能重新return一个值
# 另外,finally的x=0并不会影响try里的return。
# 我认为局部变量x的值是被改变了的,但是执行顺序上,return x中x应该已经被计算了,
# 所以finally如果没有return的话,是不会覆盖前面的return内容的


def g(x):
    try:
        x += '1'
        return x
    finally:
        x = '0'
        # return x
    
print(g('0'))

# 改为字符串也是同理

# 查看f函数的字节码
def f_bytecode(x): # 对比f函数的字节码
    x += 1
    return x
    
import dis
print(dis.dis(f))
print(dis.dis(f_bytecode))



def f():
    try:
        x = 1
        raise Exception
        y = 'y'
    except:
        print(x)
        # print(y)
    finally:
        x = 0
        print(x)
        # print(y)
f()

# except和finally都输出了,说明try里没异常之前的内容都是真实存在的
# 但是异常之后的内容都没有

标签:eafp,return,increment,lbyl,性能,try,75,测试,print
From: https://www.cnblogs.com/faf4r/p/18378382

相关文章

  • Spring Boot集成Spring Cloud Contract进行契约测试
    SpringBoot集成SpringCloudContract进行契约测试大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!契约测试的重要性在微服务架构中,服务之间通过API进行通信。随着服务的独立开发和部署,确保各个服务之间能够正确交互变得尤为重要。契约测试是一种专......
  • 一个专业的功能测试需要会什么知识?
    作者:博为峰51testing链接:https://www.zhihu.com/question/529397667/answer/2489317623来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。①测试的理论基础--------初级不管你以前有没有学过计算机,有没有计算机基础,学习测试的理论都是首要的,不管你......
  • rustlings v6.0 运行时出现 “ You are trying to run Rustlings using the old metho
    背景在之前学习rust时,使用过一段时间rustlings感觉还不错,但是之前的学习只把rustlings的题目刷了一半,然后想再从头到尾刷一遍rustlings的题目。在rustlings的README.md文档中也没有找到重置rustlings的方法,而且官方的分支也更新到了v6.2.0(我之前使用的似乎是v5.......
  • 利用 Redis Sorted Set 实现高性能排行榜
    文章目录背景使用MySQL实现排行榜实现思路优点弊端复现1)建表2)使用navicat生成500w数据3)直接使用`orderby`查询4)优化:对score添加索引Redis的SortedSet什么是SortedSetSortedSet常用命令使用示例1)添加数据2)查看前五名3)查看具体分数4)查看具体排名5)对排名......
  • 使用Appium执行自动化测试遇到的问题记录
    ‌Appium‌是一个开源的移动端自动化测试框架,它支持原生的、混合的以及移动端的web项目测试,并且能够测试iOS和Android应用程序。在使用中有时会遇到问题,特此记录:问题一:设备:Android一加问题描述:adb连接成功,执行测试脚本时AppiumDesktopsession报如下错误:settingsdeleteg......
  • SpringBoot文档之测试框架的阅读笔记
    TestingSpringBoot提供了组件spring-boot-test供开发者集成。TestScopeDependencies组件spring-boot-test导入了对如下测试工具的依赖。JUnit5:Thede-factostandardforunittestingJavaapplications.SpringTest&SpringBootTest:Utilitiesandintegrat......
  • 智商测试的发展历程及其影响:从学术研究到社会实践
    发展20世纪初,法国心理学家比奈(AlfredBinet,1857年-1911年)和他的学生编制了世界上第一套智力量表,根据这套智力量表将一般人的平均智商定为100,而正常人的智商,根据这套测验,大多在85到115之间。智商主要靠遗传,但是人的智力肯定不是一成不变的,它随着年龄的成熟而发展,因教育和训练而......
  • 大白话单元测试之mock测试
    文章目录一、什么是Mock测试二、传统的单元测试JunitTest三、Mock测试(对比junit测试)四、Mock详解1.@InjectMocks和@Mock用法2.when用法3.verify用法五、Mock其他常用用法1.如何初始化数据2.初始化service类中的Apollo配置3.Assert.assertEquals用法一、什么是Mo......
  • 【安全服务系列】安全测试:全面指南
    原创国王的快乐水测试驿栈课堂引言随着互联网技术的快速发展,网络安全威胁日益增多。企业不仅需要保护其数据资产免受外部攻击,还需要确保内部系统的安全性。安全测试作为软件开发生命周期中的关键环节,旨在识别潜在的安全漏洞和风险点,从而提高产品的整体安全性。什么是安全测......
  • 24年顺丰秋招入职SHL测评题库:综合能力Verify测评+性格测试OPQ测评题型分析
    顺丰秋招入职测评通常包括综合能力测评和性格测试两个部分。综合能力测评主要考察应聘者的基础认知能力,题型包括日历题、排序题、时间题、图形题、比例题和连线题,测试时间通常为46分钟,实际作答时间为36分钟,共24题。性格测试则采用OPQ(OccupationalPersonalityQuestionnaire)测......