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
python中的def语句输出1000以内的回文_各种方法测试回文的性能[Python]相关推荐
- python中的def语句_Python def 函数
Python def 函数 在Python中,函数声明和函数定义是视为一体的.在Python中,函数定义的基本形式如下: def add(a,b): return a+b 在这里说明几点: (1)在P ...
- python中求合数_python输出100以内的质数与合数实例代码
具体代码如下所述: __author__ = 'Yue Qingxuan' # -*- coding: utf-8 -*- #求质数 p=[2] for i in range(2,101): for ...
- python中的def函数括号里的默认值_Python中的默认参数值
Python对默认参数值的处理方法是少有的几个易使大多数新手Python程序员犯错的地方之一.(通常只犯一次) 导致困惑的地方是当你使用"可变"对象作为(参数的)默认值时的(程序) ...
- Python中的 if 语句简单介绍,中英文完整理解
来学习Python中的if语句,用英文如何表达?看看else究竟是留还是省略? Python 中的if语句可以省略else吗?if 后面的表达式求值结果是什么类型?
- python中输出1到1000以内的_Python程序-输出1000以内素数
问题简述:输出1000以内素数,同时输出素数的序数. 程序说明:编写一个函数is_prime(n),用于判断n是否为素数,使用该函数对1-1000的整数进行素性判定并且输出结果.这个程序计算时间上不是 ...
- python输出1000以内回文数_「答案」python每日一题20201108
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.用python输出1000以内的所有质数. #####方法一#####def isPrime(n): if n <=1: r ...
- Python程序-输出1000以内素数
问题简述:输出1000以内素数,同时输出素数的序数. 程序说明:编写一个函数is_prime(n),用于判断n是否为素数,使用该函数对1-1000的整数进行素性判定并且输出结果.这个程序计算时间上不是 ...
- Python输出1000以内质数代码
答: 以下是输出1000以内质数的Python代码: for num in range(2, 1000): for i in range(2, num): if num % i == 0: break ...
- Python中表达式和语句及for、while循环练习
Python中表达式和语句及for.while循环练习 1)表达式 常用的表达式操作符:x + y, x - yx * y, x / y, x // y, x % y逻辑运算:x or y, x an ...
最新文章
- 通过网络安装VMware ESX Server 5
- DevOps的前世今生
- java7 文件_Java SE 7新特性之文件操作(9) - 遍历目录树
- ​同样更新分支,git merge 和 rebase 有什么区别?
- ​四周第一次课(4月11日)lvm讲解
- 类ResourceBundle详解
- django mysql内存泄漏_Django ORM性能优化,数据存取优化
- macbook只有windows下安装os系统、trackpad++下载
- matlab画进化树分析图,系统发育(进化)树绘制小结
- python实现isPrime()函数
- SpringBoot整合Mail
- 转发:上海软件公司排行 (估计是2008年的吧)
- C++ 使用OpenSSL 基于SHA1摘要的RSA签名及验签 与Java平台互通
- MDA110-16-ASEMI单臂共阳极整流模块MDA110-16
- qq满屏飞吻代码_[爱情][飞吻][跳跳][爱心][嘴唇][玫瑰][月亮][礼物][拥抱]什么意思...
- 陈凯歌: 大创意大《无极》
- Blender 3D环境场景创建教程
- 先知——纪伯伦(2)
- python 分解变量
- c3520 宝骏凯立德地图_凯立德2018车载导航地图-2018年05月凯立德高清优化版C2939-C7M05-3H21J22最新版 - 极光站...