python中的def语句输出1000以内的回文_各种方法测试回文的性能[Python]

使用timeit模块进行速度测试,使用profile模块进行性能统计,使用dis模块进行字节码反汇编.

下面的脚本演示了如何使用模块.

从输出中注意到的一件事是函数调用的数量会影响整体性能(当然,字节码指令的数量也是如此).

希望,(以及更多实验)应该为您提供有关如何提高功能效率的足够线索.

from timeit import timeit

from cProfile import runctx

from dis import dis

def analyse(*args):

victim = 'detartrated'

number = 1000

for func in args:

print('

%s

' % ('#' * 50))

name = func.__name__

print('test: %s(%r): %r' % (name, victim, func(victim)))

code = '%s(%r)' % (name, victim)

duration = timeit(

code, 'from __main__ import %s' % name, number=number)

usec = 1000000 * duration / number

print('time: %s: %.2f usec/pass

' % (code, usec))

runctx(code, globals(), locals())

dis(func)

def check_palin1(victim):

""" check progressively inner chars """

x = 0

# len/2 is num of iter needed for guarantee

while x < (len(victim)/2):

# on pass n, compare nth letter and nth to last letter

if victim[x+0] is victim[-(1+x)]:

# then increment the n counter

x += 1

else:

return False

return True

def check_palin2(victim):

""" check first and last chars repeatedly """

tmp = []

for i in victim:

# convert string into list

tmp.append(i)

# if 1 or 0 char left, palin is guaranteed

while len(tmp) > 1:

# if the first and last characters are the same letter

if tmp[0] is tmp[-1]:

# remove them both

tmp.pop(0)

tmp.pop(-1)

else:

return False

return True

def check_palin3(victim):

""" reverse string and compare to original using a loop """

tmp = ""

# for every letter

for i in victim:

# cat it to the beginning, not append

tmp = i + tmp

return tmp == victim

def check_palin4(victim):

""" reverse string and compare to original using slice syntax """

return victim == victim[::-1]

analyse(check_palin1, check_palin2, check_palin3, check_palin4)

输出:

##################################################

test: check_palin1('detartrated'): True

time: check_palin1('detartrated'): 3.80 usec/pass

9 function calls in 0.000 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.000 0.000 :1()

1 0.000 0.000 0.000 0.000 test.py:20(check_palin1)

6 0.000 0.000 0.000 0.000 {len}

1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

22 0 LOAD_CONST 1 (0)

3 STORE_FAST 1 (x)

24 6 SETUP_LOOP 72 (to 81)

>> 9 LOAD_FAST 1 (x)

12 LOAD_GLOBAL 0 (len)

15 LOAD_FAST 0 (victim)

18 CALL_FUNCTION 1

21 LOAD_CONST 2 (2)

24 BINARY_DIVIDE

25 COMPARE_OP 0 (

28 POP_JUMP_IF_FALSE 80

26 31 LOAD_FAST 0 (victim)

34 LOAD_FAST 1 (x)

37 LOAD_CONST 1 (0)

40 BINARY_ADD

41 BINARY_SUBSCR

42 LOAD_FAST 0 (victim)

45 LOAD_CONST 3 (1)

48 LOAD_FAST 1 (x)

51 BINARY_ADD

52 UNARY_NEGATIVE

53 BINARY_SUBSCR

54 COMPARE_OP 8 (is)

57 POP_JUMP_IF_FALSE 73

28 60 LOAD_FAST 1 (x)

63 LOAD_CONST 3 (1)

66 INPLACE_ADD

67 STORE_FAST 1 (x)

70 JUMP_ABSOLUTE 9

30 >> 73 LOAD_GLOBAL 1 (False)

76 RETURN_VALUE

77 JUMP_ABSOLUTE 9

>> 80 POP_BLOCK

31 >> 81 LOAD_GLOBAL 2 (True)

84 RETURN_VALUE

##################################################

test: check_palin2('detartrated'): True

time: check_palin2('detartrated'): 10.57 usec/pass

30 function calls in 0.000 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.000 0.000 :1()

1 0.000 0.000 0.000 0.000 test.py:33(check_palin2)

6 0.000 0.000 0.000 0.000 {len}

11 0.000 0.000 0.000 0.000 {method 'append' of 'list' objects}

1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

10 0.000 0.000 0.000 0.000 {method 'pop' of 'list' objects}

35 0 BUILD_LIST 0

3 STORE_FAST 1 (tmp)

36 6 SETUP_LOOP 27 (to 36)

9 LOAD_FAST 0 (victim)

12 GET_ITER

>> 13 FOR_ITER 19 (to 35)

16 STORE_FAST 2 (i)

38 19 LOAD_FAST 1 (tmp)

22 LOAD_ATTR 0 (append)

25 LOAD_FAST 2 (i)

28 CALL_FUNCTION 1

31 POP_TOP

32 JUMP_ABSOLUTE 13

>> 35 POP_BLOCK

40 >> 36 SETUP_LOOP 75 (to 114)

>> 39 LOAD_GLOBAL 1 (len)

42 LOAD_FAST 1 (tmp)

45 CALL_FUNCTION 1

48 LOAD_CONST 1 (1)

51 COMPARE_OP 4 (>)

54 POP_JUMP_IF_FALSE 113

42 57 LOAD_FAST 1 (tmp)

60 LOAD_CONST 2 (0)

63 BINARY_SUBSCR

64 LOAD_FAST 1 (tmp)

67 LOAD_CONST 3 (-1)

70 BINARY_SUBSCR

71 COMPARE_OP 8 (is)

74 POP_JUMP_IF_FALSE 106

44 77 LOAD_FAST 1 (tmp)

80 LOAD_ATTR 2 (pop)

83 LOAD_CONST 2 (0)

86 CALL_FUNCTION 1

89 POP_TOP

45 90 LOAD_FAST 1 (tmp)

93 LOAD_ATTR 2 (pop)

96 LOAD_CONST 3 (-1)

99 CALL_FUNCTION 1

102 POP_TOP

103 JUMP_ABSOLUTE 39

47 >> 106 LOAD_GLOBAL 3 (False)

109 RETURN_VALUE

110 JUMP_ABSOLUTE 39

>> 113 POP_BLOCK

48 >> 114 LOAD_GLOBAL 4 (True)

117 RETURN_VALUE

##################################################

test: check_palin3('detartrated'): True

time: check_palin3('detartrated'): 2.77 usec/pass

3 function calls in 0.000 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.000 0.000 :1()

1 0.000 0.000 0.000 0.000 test.py:50(check_palin3)

1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

52 0 LOAD_CONST 1 ('')

3 STORE_FAST 1 (tmp)

54 6 SETUP_LOOP 24 (to 33)

9 LOAD_FAST 0 (victim)

12 GET_ITER

>> 13 FOR_ITER 16 (to 32)

16 STORE_FAST 2 (i)

56 19 LOAD_FAST 2 (i)

22 LOAD_FAST 1 (tmp)

25 BINARY_ADD

26 STORE_FAST 1 (tmp)

29 JUMP_ABSOLUTE 13

>> 32 POP_BLOCK

57 >> 33 LOAD_FAST 1 (tmp)

36 LOAD_FAST 0 (victim)

39 COMPARE_OP 2 (==)

42 RETURN_VALUE

##################################################

test: check_palin4('detartrated'): True

time: check_palin4('detartrated'): 0.65 usec/pass

3 function calls in 0.000 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)

1 0.000 0.000 0.000 0.000 :1()

1 0.000 0.000 0.000 0.000 test.py:59(check_palin4)

1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}

61 0 LOAD_FAST 0 (victim)

3 LOAD_FAST 0 (victim)

6 LOAD_CONST 1 (None)

9 LOAD_CONST 1 (None)

12 LOAD_CONST 2 (-1)

15 BUILD_SLICE 3

18 BINARY_SUBSCR

19 COMPARE_OP 2 (==)

22 RETURN_VALUE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

是时候展现真正的技术了!4道程序员智力题你能对几道| IT巨能唠

程序员对很多人来说那就是个神秘组织&#xff0c;高薪、加班多都是他们的代名词。但是&#xff0c;大家好像还忘了一点&#xff0c;那就是他们也绝对聪明&#xff01;黑客、代码天才、编程老手……层出不穷&#xff0c;晦涩的计算机难题也是分分钟搞定&#xff0c;想想就令人神…

阿里关涛谈大规模计算—从数字化阿里到数字化城市的进化

在刚刚结束的2018杭州云栖大会上&#xff0c;阿里巴巴通用计算平台负责人&#xff0c;阿里巴巴计算平台资深技术专家关涛从计算力&#xff0c;联合计算&#xff0c;智能化&#xff0c;企业级服务能力四个方面详细介绍阿里巴巴统一的超大规模数据计算平台MaxCompute的探索与实践…

java double add,Java中的DoubleStream.Builder add()方法

add()Java中DoubleStream.Builder类的方法将元素添加到正在构建的流中。该方法返回此构建器。语法如下default DoubleStream.Builder add(double ele)此处&#xff0c;ele是要添加到此流中的元素。要在Java中使用DoubleStream.Builder类&#xff0c;请导入以下包import java.ut…

解决Linux操作系统下AES解密失败的问题

现象描述&#xff1a; windows上加解密正常&#xff0c;linux上加密正常&#xff0c;解密时发生如下异常&#xff1a; javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.SunJCE_f.b(DashoA13*…) at com.sun.crypto.prov…

深入Spring Boot:利用Arthas排查NoSuchMethodError

前言 有时spring boot应用会遇到java.lang.NoSuchMethodError的问题&#xff0c;下面以具体的demo来说明怎样利用arthas来排查。 Demo: https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-NoSuchMethodError 在应用的main函数里catch住异常&#xff0c;保…

15年大厂经历!大佬总结:0基础如何学习Python?

在学习之前&#xff0c;你一定要知道你的学习目标是什么。现在市面上有太多人鼓吹“Python太火了”、“Python第一”。但是&#xff0c;注意&#xff0c;“火”、“第一”一定不能成为你学习的理由&#xff0c;千万别火急火燎的随大流。正确做法是&#xff0c;看看市面上的真正…

STL体系结构概述

文章目录 STL是什么&#xff1f;STL的六大组件STL的实现版本额外补充一、容器范围区间二、容器结构与分类序列式容器关联容器有序关联容器不定序关联容器 参考 本文将是STL系列的第一篇文章&#xff0c;主要参考《STL源码剖析》&#xff0c;辅以网络博文&#xff0c;不定时更新…

我所理解的工程师文化

对于什么是工程师文化&#xff0c;很多人都能说出很多关键词&#xff0c;比如&#xff1a;匠心&#xff0c;创新&#xff0c;专业&#xff0c;担当&#xff0c;开放…… 然而如果要用一句话来描述什么是工程师文化&#xff0c;如何判断一家公司是不是一家工程师文化的公司&…

matlab中的libsvm怎么录入数据啊,LibSVM在MATLAB中使用时的几个问题

在科研中需要用到支持向量机(Support Vector Machines, SVM)来进行分类&#xff0c;而目前比较成熟的用于实现SVM的软件包则首推LibSVM。LibSVM目前的版本已经能直接在MATLAB中使用了&#xff0c;虽然MATLAB已经提供了诸如svmtrain等SVM相关的函数&#xff0c;可是相比LibSVM的…

JAVA实现AES 解密报错Input length must be multiple of 16 when decrypting with padded cipher

加密代码 /*** 加密* * param content 需要加密的内容* param password 加密密码* return*/public static byte[] encrypt(String content, String password) {try { KeyGenerator kgen KeyGenerator.getInstance("AES");kgen.init(128, new SecureRando…

python 判断时间是否大于6点_python中判断时间间隔的问题

展开全部代码有点烂&#xff0c;不过还算能解决问题注释比较详细了# -*- coding: utf-8 -*-import datetime__author__ lpe234__date__ 2015-04-26f file(1.txt)file_content f.readlines()all_lines len(file_content)def get_(content):"""递归调用:para…

迁移学习让深度学习更容易

深度学习在一些传统方法难以处理的领域有了很大的进展。这种成功是由于改变了传统机器学习的几个出发点&#xff0c;使其在应用于非结构化数据时性能很好。如今深度学习模型可以玩游戏&#xff0c;检测癌症&#xff0c;和人类交谈&#xff0c;自动驾驶。 深度学习变得强大的同…

java多线程系列:通过对战游戏学习CyclicBarrier

CyclicBarrier是java.util.concurrent包下面的一个工具类&#xff0c;字面意思是可循环使用&#xff08;Cyclic&#xff09;的屏障&#xff08;Barrier&#xff09;&#xff0c;通过它可以实现让一组线程到达一个屏障&#xff08;也可以叫同步点&#xff09;时被阻塞&#xff0…

Wi-Fi 6到底有什么特别?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 甜草莓责编 | 阿秃▋ 什么是Wi-Fi 6 &#xff1f;Wi-Fi 6&#xff0c;是Wi-Fi联盟给IEEE Std. P802.11ax起的别名。众所周知&#xff0c;以前我们的Wi-Fi都是叫作802.11a/b/n/g/ac/ax之类的名字。这种命名方式实在容易让人…

matlab直流电机pid调速仿真,直流电机双闭环PID调速系统仿真设计

目录直流电机双闭环PID调速系统仿真1 转速、电流双闭环直流调速系统的组成及工作原理2 双闭环调速系统的动态数学模型3 调节器的设计3.1 电流调节器的设计3.2 转速调节器的设计4 搭建模型5 参数计算5.1 参数的直接计算5仿真具体参数6 仿真结果7 结束语8 参考文献摘要在工程的应…

【小技巧】桌面图标出现蓝色问号的怎么办?

【背景】 今天因为要联调前端所以用SVN更新了一下前端的代码&#xff0c;结果没想到桌面图标全部变成了带着蓝色问号的&#xff0c;吓了自己一跳。查了一下之后顺利解决了&#xff0c;不过以防万一记录一下解决方法。 【内容】 解决步骤&#xff1a;首先确定是SVN的问题导致了…

恒强制版系统980_速来围观 | 恒强制版小图高级功能讲解

点击蓝字关注我们 Spring comes小图是用自定义的动作来定义使用者色码(120-183)。小图的主要构成如下图&#xff1a;1. 模块色数属性模块色数有如下规则&#xff1a;(1) 小于100(一般填1)的小图为普通小图【980修改】&#xff1b;(2) 小于200大于100(一般填101)的小图为提花小图…

读懂这篇文章,你的阿里技术面就可以过关了 | Apache RocketMQ 101

在美国的大学课程中&#xff0c;101是所有课程中的第一门&#xff0c;是新生入学后的必修课程。阿里巴巴中间件技术专家刘振东在上周的Apache RocketMQ开发者沙龙北京站的活动上&#xff0c;进行了主题为《ApacheRocketMQ 101》的分享&#xff0c;帮助开发者从0开始学习 Apache…

HttpClient4.5 简单入门实例(一)

一、所需要的jar包 httpclient-4.5.jar httpcore-4.4.1.jar httpmime-4.5.jar 二、实例 package com.gblfy.test;import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util…

Nacos 计划发布v0.2版本,进一步融合Dubbo和SpringCloud生态

在近期的Aliware Open Source 成都站的活动上&#xff0c;阿里巴巴高级工程师邢学超&#xff08;于怀&#xff09;分享了Nacos v0.2的规划和进度&#xff0c;并对Nacos v0.3的控制台进行了预览。Nacos v0.2将进一步融入Duboo和Spring Cloud生态&#xff0c;帮助开发者更好的在微…