python-标准库【trick1】

注:主要是在看别人代码时候遇见之前没有用过的标准库,或者用过但仍然不熟悉的,记录下来。
引子代码:MOOC课后讨论

from itertools import permutations
 
def violence(s1, s2):
    s1s = [''.join(x) for x in permutations(s1)]
    if s2 in s1s:
        return True
    else:
        return False
--------------------------------------------------------
from timeit import timeit
from string import ascii_lowercase
from random import sample
import matplotlib.pyplot as plt
 
durations = []
for n in range(1, 11):
    s1 = ''.join(sample(ascii_lowercase, n))
    s2 = ''.join(sample(([ascii_lowercase, s1])[n%2], n))
    flag = ('是' if violence(s1, s2) else '非') + '变位词'
    duration = timeit('violence(s1, s2)',
                      setup='from  __main__ import violence, s1, s2',
                      number=1)
    durations.append(duration)
    print(f'{s1} 与 {s2} {flag}')
plt.plot(range(1, n+1), durations)
plt.xticks(range(1, n+1))
plt.xlabel('n')
plt.ylabel('t(s)')

1,itertools库

permutations函数:返回给定参数的全部排列组合

2,string库

ascii_lowercase属性:返回所有英文小写字母

3, timeit库

timeit函数:相比于传统time更好的计算小段代码片的计时器
timeit.timeit(stmt=‘pass’, setup=‘pass’, timer=< default timer>, number=1000000, globals=None)
例子:

timeit.timeit(setup='"_".join(str(n) for n in range(1000))', number=1000 )

解读:
其实常规用法应该是

from timeit import Timer
#  实例化Timer对象
t1 = Timer(" ", " ")  # 第一个参数是执行的语句, 第二个是setup:导入第一个语句中所需要的变量
#  调用对象的timeit函数
print(t1.timeit(number=1000)

如下代码:

from timeit import Timer
from timeit import timeit
def test1():
    l = []
    for i in range(10000):
        l = l + [i]
def test2():
    l = []
    for i in range(10000):
        l.append(i)
def test3():
    l = [i for i in range(10000)]
def test4():
    l = list(range(10000))
    
常规:
t1 = Timer("test1()", "from __main__ import test1")
print('concat %f seconds\n' % t1.timeit(number=1000))
简便:
print('concat %f seconds\n' % timeit("test1()", "from __main__ import test1", number =1000))
print('concat %f seconds\n' % timeit("test2()", "from __main__ import test2", number =1000))
print('concat %f seconds\n' % timeit("test2()", "from __main__ import test3", number =1000))
print('concat %f seconds\n' % timeit("test2()", "from __main__ import test4", number =1000))
发布了48 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/NewDreamstyle/article/details/101554222