精华内容
下载资源
问答
  • Python计算函数执行时间1. time.time()2. time.perf_counter() 推荐3. timeit.timeit ()4.装饰器统计运行耗时5. with 语句统计运行耗时 1. time.time() 在计算函数执行时间时,这种时最简洁的一种方式,用两个时间戳...

    1. time.time()

    在计算函数执行时间时,这种时最简洁的一种方式,用两个时间戳做减法。

    import time
    
    
    def func():
        print('func start')
        time.sleep(1)
        print('func end')
    
    
    t = time.time()
    func()
    print(f'coast:{time.time() - t:.4f}s')
    
    

    结果为:

    func start
    func end
    coast:1.0003s
    

    这种方法很简单,也很常用,但是如果想更精确的计算函数的执行时间,就会产生精度缺失。

    2. time.perf_counter() 推荐

    示例一中注释掉time.sleep(1),只统计两个 print 函数的执行时间:

    import time
    
    
    def func():
        print('func start')
        # time.sleep(1)
        print('func end')
    
    
    t = time.time()
    func()
    print(f'coast:{time.time() - t:.8f}s')
    
    
    func start
    func end
    coast:0.0000s
    

    这就说明time.time() 函数的精度不是特别高,没法统计执行时间极短的函数耗时。

    perf_counter 函数是在 python3.3 中新添加的,它返回性能计数器的值,返回值是浮点型,统计结果包括睡眠的时间,单个函数的返回值无意义,只有多次运行取差值的结果才是有效的函数执行时间。

    import time
    
    
    def func():
        print('func start')
        # time.sleep(1)
        print('func end')
    
    
    t = time.perf_counter()
    func()
    print(f'coast:{time.perf_counter() - t:.8f}s')
    
    

    结果

    func start
    func end
    coast:0.00001500s
    

    结果并不是 0 秒, 而是一个很小的值,这说明 perf_counter() 函数可以统计出 print 函数的执行耗时,并且统计精度要比 time.time() 函数要高,比较推荐作为计时器来使用。

    3. timeit.timeit ()

    timeit() 函数有 5 个参数,stmt=‘pass’, setup=‘pass’, timer=, number=1000000, globals=None。

    • stmt 参数是需要执行的语句,默认为 pass
    • setup 参数是用来执行初始化代码或构建环境的语句,默认为 pass
    • timer 是计时器,默认是 perf_counter()
    • number 是执行次数,默认为一百万
    • globals 用来指定要运行代码的命名空间,默认为 None。
    import time
    import timeit
    
    
    def func():
        print('func start')
        time.sleep(1)
        print('func end')
    
    
    print(timeit.timeit(stmt=func, number=1))
    
    

    以上方案中比较推荐使用的是 time.perf_counter() 函数,它具有比较高的精度,同时还被用作 timeit 函数默认的计时器。

    4.装饰器统计运行耗时

    在实际项目代码中,可以通过装饰器方便的统计函数运行耗时。

    import time
    
    
    def coast_time(func):
        def fun(*args, **kwargs):
            t = time.perf_counter()
            result = func(*args, **kwargs)
            print(f'func {func.__name__} coast time:{time.perf_counter() - t:.8f} s')
            return result
    
        return fun
    
    
    @coast_time
    def test():
        print('func start')
        time.sleep(2)
        print('func end')
    
    
    if __name__ == '__main__':
        test()
    

    如果有使用异步函数的需求也可以加上:

    import asyncio
    import time
    from asyncio.coroutines import iscoroutinefunction
    
    
    def coast_time(func):
        def fun(*args, **kwargs):
            t = time.perf_counter()
            result = func(*args, **kwargs)
            print(f'func {func.__name__} coast time:{time.perf_counter() - t:.8f} s')
            return result
    
        async def func_async(*args, **kwargs):
            t = time.perf_counter()
            result = await func(*args, **kwargs)
            print(f'func {func.__name__} coast time:{time.perf_counter() - t:.8f} s')
            return result
    
        if iscoroutinefunction(func):
            return func_async
        else:
            return fun
    
    
    @coast_time
    def test():
        print('func start')
        time.sleep(2)
        print('func end')
    
    
    @coast_time
    async def test_async():
        print('async func start')
        await asyncio.sleep(2)
        print('async func end')
    
    
    if __name__ == '__main__':
        test()
        asyncio.get_event_loop().run_until_complete(test_async())
    

    使用装饰器来统计函数执行耗时的好处是对函数的入侵性小,易于编写和修改。

    装饰器装饰函数的方案只适用于统计函数的运行耗时,如果有代码块耗时统计的需求就不能用了,这种情况下我们可以使用 with 语句自动管理上下文。

    5. with 语句统计运行耗时

    通过实现 enterexit 函数可以让我们在进入上下文和退出上下文时进行一些自定义动作,例如连接 / 断开数据库、打开 / 关闭文件、记录开始 / 结束时间等等,这里我们用来统计函数块的执行时间。

    import asyncio
    import time
    
    
    class CoastTime(object):
        def __init__(self):
            self.t = 0
    
        def __enter__(self):
            self.t = time.perf_counter()
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print(f'coast time:{time.perf_counter() - self.t:.8f} s')
    
    
    def test():
        print('func start')
        with CoastTime():
            time.sleep(2)
            print('func end')
    
    
    async def test_async():
        print('async func start')
        with CoastTime():
            await asyncio.sleep(2)
            print('async func end')
    
    
    if __name__ == '__main__':
        test()
        asyncio.get_event_loop().run_until_complete(test_async())
    
    

    with 语句不仅可以统计代码块的执行时间,也可以统计函数的执行时间,还可以统计多个函数的执行时间之和,相比装饰器来说对代码的入侵性比较大,不易于修改,好处是使用起来比较灵活,不用写过多的重复代码。

    展开全文
  • Python 计算函数运行时间

    万次阅读 2019-03-26 11:27:31
    Python中,有时候为了优化代码,我们需要监控哪些函数使用了比较多的时间,或者是为了单纯查看函数的运行时间。那么本文推荐两种监控函数运行时间的方法。 方法一: 在程序内使用time模块记录时间,计算使用的时间 ...

    在Python中,有时候为了优化代码,我们需要监控哪些函数使用了比较多的时间,或者是为了单纯查看函数的运行时间。那么本文推荐两种监控函数运行时间的方法。


    方法一: 在程序内使用time模块记录时间,计算使用的时间
    import time
    
    def test():
        start_time = time.time()  # 记录程序开始运行时间
        s = 0
        for i in range(1000000):
            s += 1
        end_time = time.time()  # 记录程序结束运行时间
        print('Took %f second' % (end_time - start_time))
        return s
    
    test()
    
    # 运行结果:
    Took 0.085060 second
    Out[47]: 1000000
    

    这种方法快速简单,只需要在程序中加入三行命令即可实现运行时间的计算。


    方法二:定义装饰器,装饰需要计算时间的函数进行监控
    import time
    from functools import wraps
    
    def timefn(fn):
        """计算性能的修饰器"""
        @wraps(fn)
        def measure_time(*args, **kwargs):
            t1 = time.time()
            result = fn(*args, **kwargs)
            t2 = time.time()
            print(f"@timefn: {fn.__name__} took {t2 - t1: .5f} s")
            return result
        return measure_time
    
    
    # 在定义函数前进行装饰
    @timefn
    def test():
        s = 0
        for i in range(1000000):
            s += 1
        return s
        
    test()
    
    # 运行结果:
    @timefn: test took 0.05930 s
    Out[15]: 1000000
    

    这种方法显然更具有复用性,同时也更Pythonic。适合在程序中有多个函数需要监控时间的时候使用。需要注意的是:在Python2中获取函数名称的写法为fn.func_name,而在Python3中变为了fn.__name__。该用法涉及到装饰器的使用,想要更深入地了解可以到:
    http://www.runoob.com/w3cnote/python-func-decorators.html
    上面的这种写法也相当于:

    timefn(test())
    # 运行结果:
    @timefn: test took 0.05956 s
    Out[16]: <function __main__.timefn.<locals>.measure_time>
    

    但装饰器的写法不会破坏原来函数的结构。

    展开全文
  • 经常会计算一段程序执行需要多长时间,python中提供了便捷的计算方法 Timer 使用方式如下 #斐波那契数列函数 # 模拟业务进程 def demo(n): sum = 0 for i in range(n): sum +=i return sum from timeit ...

    经常会计算一段程序执行需要多长时间,python中提供了便捷的计算方法 Timer 使用方式如下

    #斐波那契数列函数
    
    # 模拟业务进程
    def demo(n):
        sum = 0
        for i in  range(n):
            sum +=i
        return sum
    
    from timeit import Timer
    #测试 计算斐波那契数列的消耗时间
    t = Timer(stmt='demo(1000)', setup='from __main__ import demo')
    #执行n次的时间
    n=10
    print(t.timeit(n))
    
    

    参数说明

    stmt :要计算时间的函数

    setup:函数的依赖

    展开全文
  • python计算函数 f(x) = 0的根的代码

    千次阅读 2019-04-09 07:27:27
    下面内容段是关于python计算函数 f(x) = 0的根的内容,应该是对大家也有用。## module bisection ''' root = bisection(f,x1,x2,switch=0,tol=1.0e-9). Finds a root of f(x) = 0 by bisection. The root must be ...
    下面内容段是关于python计算函数 f(x) = 0的根的内容,应该是对大家也有用。

    ## module bisection
    ''' root = bisection(f,x1,x2,switch=0,tol=1.0e-9).
        Finds a root of f(x) = 0 by bisection.
        The root must be bracketed in (x1,x2).
        Setting switch = 1 returns root = None if
        f(x) increases upon bisection.
    '''    
    from math import log,ceil
    import error
     
    def bisection(f,x1,x2,switch=1,tol=1.0e-9):
        f1 = f(x1)
        if f1 == 0.0: return x1
        f2 = f(x2)
        if f2 == 0.0: return x2
        n = ceil(log(abs(x2 - x1)/tol)/log(2.0))
        for i in range(n):
            if (switch == 1) and (abs(f3) > abs(f1)) 
                             and (abs(f3) > abs(f2)):
                return None   
            if f3 == 0.0: return x3
            else:           x2 = x3; f2 = f3
        return (x1 + x2)/2.0              复制代码
                                                                                                                                   


    转载于:https://juejin.im/post/5cac49426fb9a06876101cdd

    展开全文
  • 总的来说,我对编程很陌生,虽然我确信这看起来像是家庭作业,但它很...在我知道我每次都设置为0,但是我不知道如何在这样一个已经返回值的函数中创建累加器模式(如果这样做是正确的话)。在我的代码是:import ra...
  • 问题出于教学目的,我想计算在给定函数中执行给定行的次数,而不修改或修饰它。例如,对于函数:def binary_search(seq, x):(a, b) = (0, len(seq) - 1)while a <= b:m = (a + b) / 2if x < seq[m]:b = m - 1...
  • Python计算函数的运行时间

    千次阅读 2017-07-18 16:34:54
    >>> def timeFun(): ... import time ... time_start = time.time() #time.time()为1970.1.1到当前时间的毫秒数 ... b, alphas = svmMLiA.smoSimple(dataArr, labelArr, 0.6, 0.001, 40) # 运行主体 ...
  • 根据坐标点,计算曲线与坐标轴的面积。import numpy as npimport matplotlib.pyplot as pltx = np.arange(0,1,0.001)y = np.sqrt(1-x**2)plt.close('all')plt.plot(x, y)plt.show()1. trapz函数利用梯度规则...
  • 函数定义域、值域方法和典型题归纳一、基础知识整合1.函数的定义:设集合A和B是非空数集,按照某一确定的对应关系f,使得集合A中任意一个数x,在集合B中都有唯一确定的数f(x)与之对应。则称f:为A到B的一个函数。2....
  • python 卷积函数What is a convolution? OK, that’s not such a simple question. Instead, I am will give you a very basic example and then I will show you how to do this in Python with actual functions. ...
  • Python计算三角函数之acos()方法的使用acos()方法返回x的反余弦值,以弧度表示。语法以下是acos()方法的语法:acos(x)注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这...
  • 语法以下是acos()方法的语法:acos(x)注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数。 参数x -- 这必须是在范围内的数字值-1到1,如果x大于1,则它会产生一个...
  • python微元法计算函数曲线长度的方法
  • python 三角函数 计算

    千次阅读 2021-01-15 11:36:55
    今天用做结构的时候突然要算一下角度,就想用python简单计算一下,结果发现,中学学的三角函数内容全喂狗了。 python中三角函数计算当然就是直接进math库,这没啥说的,导入这个库就行。但是下边计算的时候度这个...
  • python计算log函数

    千次阅读 2019-10-05 17:26:34
    python计算log函数 语法 以下是 log() 方法的语法: import math math.log(x[, base]) 注意:log()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。 参数 x -- 数值表达式。 base -- 可选,...
  • 上一期,我们介绍了指数函数的形和质以及运算法则,其中有两个非常漂亮的指数函数图就是用python的matplotlib画出来的。这一期,我们将要介绍如何利用python绘制出如下指数函数。图 1 a>1我们知道当0 ,指数函数 ...
  • Python科学计算与数据处理—Python函数Python的基本函数目录函数的定义以及调用函数的形式函数参数、局部变量和全局变量的标注表明,公共函数和调用函数的定义是一个能够完成特定功能的代码块,可以在程序中重用,以...
  • 使用Python计算softmax函数   softmax函数计算公式如下: Si=evi∑0jevi S_i = \frac{e^{v_i}}{\displaystyle\sum_0^j e^{v_i}} Si​=0∑j​evi​evi​​   其中,Vi是长度为j的数列V中的一个数,带入softmax的...
  • Python中,用 def 语句创建函数时,可以用return语句指定应该返回的值,该返回值可以是任意类型。需要注意的是,return 语句在同一函数中可以出现多次,但只要有一个得到执行,就会直接结束函数的执行。函数中,使用...
  • 前言本文主要给大家介绍了关于python计算时间差(返回天数)的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧方法如下:将时间戳转换成日期格式: import timetime_stamp = 1547445305...
  • 我们在制作python开发时,学会计算代码运行时间,是非常有意义的,一般我们都强调高效运转,这只是使用测试时间的其中之一方式,还有时候,我们要去检测已经编写好的内容,需要使用利用计算时间,来去找下有哪些不能...
  • python计算ln函数_python-含参函数

    千次阅读 2020-12-06 14:57:32
    /usr/local/bin/python3# -*- coding:utf-8 -*-'''#----------函数位置参数和关键字参数----------def test(x,y): #此处的 x,y为形参print(x)print(y)test(1,2) #位置参数调用-此处的 1,2为实参,且与形参一一对应...
  • python对数函数Logarithms are used to depict and represent large numbers. The log is an inverse of the exponent. This article will dive into the Python log() functions. The logarithmic functions of ...
  • 我必须做以下事情:A function eval_f(f, xs) which takes a function f = f(x) and a list xs of values that should be used as arguments for f. The function eval_f should apply the function f subsequently ...
  • 使用python装饰器计算函数运行时间的实例装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率今天就来见识一下 python 装饰器,到底是怎么工作的。本文主要是利用python装饰器计算函数...
  • 主要介绍了Python计算三角函数之asin()方法的使用,是Python入门的基础知识,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,039
精华内容 9,615
关键字:

python计算函数

python 订阅