Python代码在执行时被编译成Python字节码,然后由Python虚拟机执行Python字节码。有时候我们执行一个python文件的时候,会生成一个pyc文件。这个pyc文件是用来存放Python字节码指令的,而这些字节码是一种类似于汇编指令的中间语言,只不过每一个字节码对应的不是机器指令,而是一段C代码。Dis模块就是用来查看这些字节码的运行轨迹的,所以我们可以通过Dis模块来判断这两个函数哪个占用内存多,哪个占用CPU性能多。不仅如此,通过指令,我们还可以了解Python中的一些内置函数、变量值处理、运行逻辑,对于我们的代码性能和代码优化都有很大的帮助。下面将通过两个例子来介绍Dis模块的使用。1、为什么下面第一个函数比第二个函数消耗的内存少?deftest1(a):if0>号表示跳转到第三列的目标:内部机器码操作。第四列:指令参数。第五栏:实际参数。两个函数的dis解析用*隔开,可以清楚的看到两个函数的语句区别。第二个函数的字节码索引最多为30,而第一个函数的字节码索引最多只有22,所以第一个函数比第二个函数消耗的内存少。此外,第一列和第二列之间的>>符号表示跳转的目标。可以看到第二个函数第四列的18,表示跳转到了索引为18的指令,也就是ROT_TWO。第二个函数也比第一个函数有更多的跳转,这也可能导致在某些特殊情况下其效率低于第一个函数。2.为什么在Python2中whileTrue比while1慢?while1:passwhileTrue:pass可以在命令中使用dis来分析:可以看到,while1在第二行直接JUMP_ABSOLUTE,所以相比WhileTrue,LOAD_NAME和POP_JUMP_IF_FALSE少了。这是因为True在Python2中不是关键字,而是一个内置变量,所以每次Python都会使用LOAD_NAME来检查(POP_JUMP_IF_FALSE)True的值。这就是为什么WhileTrue比while1慢的原因。在Python3中,True成为了关键字,所以不存在这个问题:Python3对Python2做了很多替换,这也是不兼容的原因之一Python2,差别太大了。因此,建议初学者直接使用Python3学习,不要使用Python2。希望以上两个使用Dis模块的例子能给大家带来一些启发。分析一段Python代码的深层次性能问题虽然费时费力,但是一旦分析出深层次的性能原因,就能积累很多深层次的技术知识和写出更漂亮的代码。这是我们文章的结尾。如果你今天想要我们的Python教程,请继续关注我们。如果对您有帮助,请在下方点赞/观看!如果您有任何问题,请在下方留言区留言,我们会耐心解答!Python实战宝典(pythondict.com)不仅仅是一个集合。欢迎关注公众号:Python实战宝典原文来自Python实战宝典:pythonDis模块代码表现