当前位置 : 主页 > 编程语言 > java >

【案例】只需加一行代码,就能够获悉执行流程?

来源:互联网 收集:自由互联 发布时间:2022-06-23
文章目录 ​​1. 案例介绍​​ ​​2. 准备工作​​ ​​3. 细节设计​​ ​​4. 代码汇总​​ ​​5. 运行结果​​ ​​后记​​ 1. 案例介绍 今天我们使用 Python 提供的相关库函数,实


文章目录

  • ​​1. 案例介绍​​
  • ​​2. 准备工作​​
  • ​​3. 细节设计​​
  • ​​4. 代码汇总​​
  • ​​5. 运行结果​​
  • ​​后记​​

1. 案例介绍

今天我们使用 Python 提供的相关库函数,实现在执行函数时,打印每一步的变量值。

2. 准备工作

  • pysnooper。
  • 装饰器的知识。

3. 细节设计

代码的关键是使用了 @pysnooper.snoop() 装饰器方法。

那么什么是装饰器呢?装饰器是一个特殊的函数,本质上是一个函数,在另一个函数开始执行前先执行,就像是一扇门一样。来看下面的例子:

def decor(func):
print("This is decorator.")
def warp():
func()
return warp

@decor
def function():
print("This is func.")

function()

# 输出
This is decorator.
This is func.

只需要将 @+装饰器函数名 添加在其它函数开头,便能够很方便地将装饰器函数的功能添加在另一个函数上,是不是很方便呢?

4. 代码汇总

# encoding: utf-8
# !/usr/bin/python
"""
@Filename:使用pysnooper
@Author: Jiaming
@Create date:2019.5.29
@Mail:jiaming.Z@foxmail.com
@Blog:
@Description:
"""
import math
import pysnooper


@pysnooper.snoop()
def number_to_bits(number):
"""
:param number:
:return:
"""
if number:
print(math.sin(math.pi / 3))
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]


print("---\n结果:", number_to_bits(6))

5. 运行结果

我们来看看输出内容:

会输出执行每一行代码的时间、该代码位置、代码内容、是否是新的变量、如果是旧的变量,那么值改为了多少…

Source path:... D:\Programmer\PYTHON\\使pysnooper.py
Starting var:.. number = 6
14:44:16.572923 call 16 def number_to_bits(number):
14:44:16.573923 line 21 if number:
14:44:16.573923 line 22 print(math.sin(math.pi / 3))
0.8660254037844386
14:44:16.574922 line 23 bits = []
New var:....... bits = []
14:44:16.574922 line 24 while number:
14:44:16.574922 line 25 number, remainder = divmod(number, 2)
Modified var:.. number = 3
New var:....... remainder = 0
14:44:16.574922 line 26 bits.insert(0, remainder)
Modified var:.. bits = [0]
14:44:16.574922 line 24 while number:
14:44:16.574922 line 25 number, remainder = divmod(number, 2)
Modified var:.. number = 1
Modified var:.. remainder = 1
14:44:16.574922 line 26 bits.insert(0, remainder)
Modified var:.. bits = [1, 0]
14:44:16.575923 line 24 while number:
14:44:16.575923 line 25 number, remainder = divmod(number, 2)
Modified var:.. number = 0
14:44:16.575923 line 26 bits.insert(0, remainder)
Modified var:.. bits = [1, 1, 0]
14:44:16.575923 line 24 while number:
14:44:16.575923 line 27 return bits
14:44:16.575923 return 27 return bits
Return value:.. [1, 1, 0]
---
: [1, 1, 0]


. . .

后记

当然,关于装饰器以及 pysnooper 的用法这里都只是抛砖引玉,有机会我们可以好好总结下装饰器的用法,这个东西用处还是蛮大的。ok,以上就是我们今天的内容。
【案例】只需加一行代码,就能够获悉执行流程?_python


上一篇:Linux 学习资源网站总结,学术向
下一篇:没有了
网友评论