我正在从头开始学习Python。同样,我正在使用这本书'How To Think Like a Computer Scientist'。第7.12节同样涉及字符分类,它列出了3种不同的确定方式 给定的字符(ch)是小写的,如下所示:
1
def is_lower(ch):
return string.find(string.lowercase, ch) != -1
2
def is_lower(ch):
return ch in string.lowercase
3
def is_lower(ch):
return 'a' <= ch <= 'z'
我在考虑哪些是最快的处理方式。我只关心处理时间,而不是内存要求。我猜这是第三个,因为在前两种情况下,整个字符串可能需要处理直到最后才能找出字符是否存在,而在第三种情况下,只需要两次比较就足够了整个字符串不需要处理。我猜对了吗?
答案 0 :(得分:0)
以下是使用timeit
的测试代码:
import string
import timeit
import random
def is_lower(ch):
return string.find(string.lowercase, ch) != -1
def is_lower1(ch):
return ch in string.lowercase
def is_lower2(ch):
return 'a' <= ch <= 'z'
def wrapper(func, *args, **kwargs):
def wrapped():
return func(*args, **kwargs)
return wrapped
for i in range(100):
lt = random.choice(string.letters)
wrappered1 = wrapper(is_lower, lt)
wrappered2 = wrapper(is_lower1, lt)
wrappered3 = wrapper(is_lower2, lt)
t1, t2, t3 = [], [], []
t1 += timeit.repeat(wrappered1, repeat=3, number=100000)
t2 += timeit.repeat(wrappered2, repeat=3, number=100000)
t3 += timeit.repeat(wrappered3, repeat=3, number=100000)
print 't1: ', sum(t1)/len(t1)
print 't2: ', sum(t2)/len(t2)
print 't2: ', sum(t3)/len(t3)
输出:
Out[44]:
t1: 0.0781290027991
t2: 0.0348194339546
t2: 0.0307262024573
可以清楚地看到,最后一种方法是最快的,而第一种方法是最慢的。