0
点赞
收藏
分享

微信扫一扫

Python计算整数阶乘的几种方法比较


问题本身很简单,主要是通过这个小问题来演示Python的一些用法,例如测试代码运行时间、函数嵌套定义等等。

from time import time
from math import factorial
from functools import reduce
from random import randint
def myFactorial1(n):
    '''使用传统方法计算阶乘'''
    result = 1
    for i in range(1, n+1):
        result = result*i
    return result
def myFactorial2(n):
    '''使用reduce()函数'''
    #Python允许函数的嵌套定义
    def mul(x, y):
        return x*y
    
    return reduce(mul, range(1, n+1))
def myFactorial3(n):
    '''使用reduce()函数'''
    #lambda表达式可以作为函数来使用
    return reduce(lambda x,y: x*y, range(1, n+1))
def myFactorial4(n):
'''递归法'''
    if n == 1:
        return 1
    else:
        return n*myFactorial4(n-1)
def builtinFactorial(n):
    '''使用Python标准库提供的方法直接计算阶乘'''
    return factorial(n)
functions = {'Straightforward':myFactorial1,
             'Use map to simulate':myFactorial2,
             'Use map+lambda to simulate':myFactorial3,
             'Use recursive method':myFactorial4,
             'Builtin factorial method in math':builtinFactorial}
for m in range(10):
    results = []
    timeUsed = dict()
    #生成随机整数进行测试
    n = randint(100, 500)
    print('='*30)
    print('n=', n)
    #比较几个函数的计算结果是否一致,比较每个函数所用时间
    for name, func in functions.items():
        start = time()
        for i in range(1000):
            func(n)
        results.append(func(n))
        timeUsed[name] = time()-start
    #按所用时间从大到小输出
    for n, t in sorted(timeUsed.items(), key=lambda x:x[1], reverse=True):
        print(n, ':', t)
    #如果所有函数计算结果一致,输出OK
    if results.count(results[0]) == len(results):
        print('OK')

“Python小屋”进入公众号,关注后可以查看更多内容!

欢迎转发给您的朋友,或许这正是Ta需要的知识!

举报

相关推荐

0 条评论