百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

python散装笔记——194: 性能分析

itomcoil 2025-05-02 18:58 8 浏览

1、 在 IPython 中使用 %%timeit和 %timeit

这两个命令可以用来分析字符串的拼接性能以及列表等可迭代对象的循环性能

分析字符串拼接的性能:

 In [1]: import string
 In [2]: %%timeit s=""; long_list=list(string.ascii_letters)*50
 ....: for substring in long_list:
 ....: s+=substring
 ....:
 1000 loops, best of 3: 570 us per loop
 In [3]: %%timeit long_list=list(string.ascii_letters)*50
 ....: s="".join(long_list)
 ....:
 100000 loops, best of 3: 16.1 us per loop
 Profiling loops over iterables and lists:
 In [4]: %timeit for i in range(100000):pass
 100 loops, best of 3: 2.82 ms per loop
 In [5]: %timeit for i in list(range(100000)):pass
 100 loops, best of 3: 3.95 ms per loop

分析对可迭代对象和列表的循环性能:

 In [4]: %timeit for i in range(100000):pass
 100 loops, best of 3: 2.82 ms per loop
 In [5]: %timeit for i in list(range(100000)):pass
 100 loops, best of 3: 3.95 ms per loop

2、 使用 cProfile(推荐的性能分析器)

Python 包含一个名为 cProfile 的性能分析器。通常建议使用它而不是 timeit

它会分析您脚本中的每个函数,并告诉您:

  • ncalls:函数被调用的次数
  • tottime:在给定函数中花费的总时间(不包括调用子函数的时间)
  • percall:每次调用的平均时间(tottime 除以 ncalls
  • cumtime:在该函数及其所有子函数中花费的累积时间(从调用到退出)。即使是递归函数,这个数字也是准确的。
  • percallcumtime 除以原始调用次数
  • filename:lineno(function):提供每个函数的相应数据

可以通过命令行轻松调用 cProfiler:

 $ python -m cProfile main.py

按函数中花费的时间对返回的性能分析方法列表进行排序:

 $ python -m cProfile -s time main.py

3、 timeit()函数

分析数组中元素的重复性能:

 >>> import timeit
 >>> timeit.timeit('list(itertools.repeat("a", 100))', 'import itertools', number = 10000000)
 10.997665435877963
 >>> timeit.timeit('["a"]*100', number = 10000000)
 7.118789926862576

4、 timeit命令行

分析数字拼接的性能:

 python -m timeit "'-'.join(str(n) for n in range(100))"
 10000 loops, best of 3: 29.2 usec per loop
 
 python -m timeit "'-'.join(map(str,range(100)))"
 100000 loops, best of 3: 19.4 usec per loop

5、命令行中的 line_profiler

带有 @profile 指令的源代码,用于标记我们想要分析的函数:

 import requests
 
 @profile
 def slow_func():
   s = requests.session()
   html=s.get("https://en.wikipedia.org/").text
   sum([pow(ord(x),3.1) for x in list(html)])
 
 for i in range(50):
   slow_func()

使用 kernprof 命令逐行计算性能分析:

 $ kernprof -lv so6.py
 
 Wrote profile results to so6.py.lprof
 Timer unit: 4.27654e-07 s
 
 Total time: 22.6427 s
 File: so6.py
 Function: slow_func at line 4
 
 Line # Hits Time Per Hit % Time Line Contents
 ==============================================================
 4 @profile
 5 def slow_func():
 6 50 20729 414.6 0.0 s = requests.session()
 7 50 47618627 952372.5 89.9 html=s.get("https://en.wikipedia.org/").text
 8 50 5306958 106139.2 10.0 sum([pow(ord(x),3.1) for x in list(html)])

页面请求几乎总是比基于页面信息的任何计算都要慢。



如果您对我的文章有兴趣,我把我发布的文章都归档到我私人网站中去,欢迎访问 https://three-corner.xyz 查阅之前的文章。

相关推荐

python学习——029统计【字典的列表】里符合条件元素数量

方式一:使用普通for循环students=[{'name':'jack','points':100},{'...

玩转Python—列表使用教程

上一讲给大家介绍了Python的列表,今天继续给大家介绍Python中列表的使用。1.列表的元素的赋值#实例>>>num=[1,2,3,4,5,6,7,7,8,8,9]>...

python学习——030如何将列表中的元素按要求分类

方法一:原代码方法(使用while循环结合pop方法)创建了numbers列表的一个副本temp_numbers,在循环中对temp_numbers进行操作,保证原列表numbers的内...

Python 条件判断教程

Let'sdivein!1.基本的if语句(ifStatement)在Python中,if语句用来根据条件执行代码块。当条件为True(真)时,代码块将被执行;否则,...

list列表基本操作

【实验目的】1、掌握list列表的基本操作【实验原理】列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字-它...

Python变量类型判断方法详解

技术背景在Python编程中,变量类型的判断是一项基础且重要的操作。由于Python是动态类型语言,变量的类型在运行时才能确定,因此在开发过程中,我们常常需要明确变量的类型,以便进行相应的操作。同时,...

基础知识详解:Python any()函数的使用方法(含示例代码)

前言:今天为大家带来的内容是:Pythonany()函数的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,要是喜欢本文章内容的朋友,一定不忘点赞转发关注收藏不迷...

新手学Python避坑,学习效率狂飙! 八、Python 布尔值判断

布尔值判断系统知识在Python里,布尔类型仅有两个值:True和False,它们常被用于条件判断。下面从几个方面展开介绍:1.布尔运算逻辑与(and):只有当两个操作数都为True时,...

Python新手必看|列表操作全攻略(增删改查+切片+推导式)

一、为什么列表是Python的"万能容器"?作为最灵活的序列类型,列表支持:存储任意类型数据(数字/字符串/对象)动态增减元素快速索引访问丰富的内置方法python#创建包含不同数据...

Python列表集合操作介绍?

列表和集合是在Python编程中比较常用,而且比较常见的两种数据结构,他们有着各自的特点以及使用场景,下面我们就来详细的介绍一下列表和集合在实际使用中的一些操作对比。List(列表)列表操作的特点就是...

对Python中序列的个人理解

序列指的是一块连续内存空间存放多个值,在python中,序列类型包括字符串、列表、字典、元组、集合。其中包括字符串、列表、元组为有序序列,字典、集合属于无序序列。例如:#定义变量name,并赋值为字...

python 数据结构之列表(list)简述及演示

(一)list列表定义使用中括号[],里面元素可以是任意类型,包括列表本身,也可以是字典、元组等。(二)在Python中,第一个列表元素的索引为0,而不是1。(三)要访问列表的任何元素,都可将...

Python 列表(List)详解

列表是Python中最基本、最常用的数据结构之一,它是一个有序的、可变的元素集合。一、列表的基本操作1.创建列表#空列表empty_list=[]empty_list=list()...

自学Python第九天——操作列表

自学Python第九天——操作列表一、遍历整个列表1、需要对列表中的每个元素进行相同的操作时,使用for循环例如前几张我们学过的一些内容,想将列表中的每个元素打印出来,需要不断地重复代码,而且因列表长...

Python 列表(List)完全指南:数据操作的利器

在Python中,列表(list)是一种可变序列(mutablesequence),它允许我们存储和操作一组有序数据(ordereddata)。本教程将从基础定义(basicdefiniti...