我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

计算函数运行时间的问题,就是为了解决效率问题。不同的方案总是有不同的运行时间消耗的。那么,如何量化的考察某个函数的运行时间消耗呢?思路就是在开始运行的时候,计算个时间,结束的时候,再计算个时间。两者相减就是需求方案了。本文的解决思路,是把上述思路包装成一个python的装饰器,然后就可以批量调用了。

苏南大叔:python教程,如何利用装饰器功能计算函数运行时间? - 计算函数运行时间
python教程,如何利用装饰器功能计算函数运行时间?(图3-1)

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码经验。本文测试环境:win10python@3110gensim@4.3.2

本文龙套

本文的龙套角色,来自于上一篇文章。因为加载语料库和进行向量计算,都是非常耗时的。所以,用作本文的龙套角色标的物,非常合适。

龙套一,使用.txt文件。

file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.txt'
model = KeyedVectors.load_word2vec_format(file, binary=False)

龙套二,使用.bin文件。

file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.bin'
model = KeyedVectors.load_word2vec_format(file, binary=True)

装饰器

在以前的文章里面,苏南大叔对python的装饰器功能做过很细致的探讨和描述。参考文章:

事实上,平时也用不到那么高大上的功能。下面的代码就是本文的主角,计时用的装饰器:

import time
def performance(func):
    def fun(*args,**kwargs):
        t = time.perf_counter()
        result = func(*args,**kwargs)
        print(f'函数 {func.__name__} 运行时间:{time.perf_counter() - t:.8f} 秒')
        return result
    return fun

苏南大叔:python教程,如何利用装饰器功能计算函数运行时间? - 装饰器定义
python教程,如何利用装饰器功能计算函数运行时间?(图3-2)

计时对比

那么,对比开始:

from gensim.models import KeyedVectors
import os
os.chdir(os.path.dirname(__file__))
import time
def performance(func):
    def fun(*args,**kwargs):
        t = time.perf_counter()
        result = func(*args,**kwargs)
        print(f'函数 {func.__name__} 运行时间:{time.perf_counter() - t:.8f} 秒')
        return result
    return fun
@performance
def sim_txt():
    file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.txt'
    model = KeyedVectors.load_word2vec_format(file, binary=False)
    s = model.similarity("北京","唐山")
    # print(s)
@performance
def sim_bin():
    file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.bin'
    model = KeyedVectors.load_word2vec_format(file, binary=True)
    s = model.similarity("北京","唐山")
    # print(s)
sim_txt()
sim_bin()

苏南大叔:python教程,如何利用装饰器功能计算函数运行时间? - 运行结果差异明显
python教程,如何利用装饰器功能计算函数运行时间?(图3-3)

结果输出:

函数 sim_txt 运行时间:171.60744600 秒
函数 sim_bin 运行时间:15.10192990 秒

结论是:使用.bin文件进行计算的话,会更加快一些,速度快十一倍。

结束语

其实,“使用装饰器对函数计时”是苏南大叔上学的时候的一个作业题,哈哈哈。更多python经验文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python