喜欢调试的时候显示数据并显示一些其它的信息,比如区分是哪次调用的调试信息,比如友好的显示dict等相对复杂的数据类型,所以这里涉及到两个方面。一是统计函数被调用次数;二是格式化展示dict数据。本文地址:http://47.93.183.36/article/973.html,未经许可,不得转载.
在类中对一个函数的调用次数进行统计比较方便,直接定义一个类属性来计数即可,但对于一个普通函数这样的方法就不能实现了,于是我们可以通过装饰器来实现。本文地址:http://47.93.183.36/article/973.html,未经许可,不得转载.
装饰器(Decorators)是Python的一个重要功能,它是一个可以修改其他函数的功能的函数。简单地说,装饰器可以让你在一个已经定义的函数的前后去执行其它代码,这有点像JAVA中的AOP切面编程。我们先写一个装饰器类,然后在调用的方法上注明这是一个装饰器,此时再调用方法就会执行显示一个分隔行,同时记录了当前是第几次调用这个调试显示函数,然后再打印要debug的数据。代码如下:本文地址:http://47.93.183.36/article/973.html,未经许可,不得转载.
#定义装饰器 class CountClass(object): def __init__ (self, func): self.func = func self.count = 0 def __call__ (self, *args, **kwargs): self.count += 1 print("*"*20 + str(self.func.__name__) + ":" +str(self.count) + "*"*20) return self.func(*args, **kwargs) #再来写一个被装饰的函数: @CountClass def show(data:any): print(data) #调用 show(data = "123abc")本文地址:http://47.93.183.36/article/973.html,未经许可,不得转载.
针对第二个方面,格式化展示复杂数据,主要是dict类型数据。可以使用官方模块 pprint 格式化打印 dict 数据,python推出pprint正是因为print在显示复杂数据方面的不美观,比如打印一个dict,使用print显示一长串会看花眼。本文地址:http://47.93.183.36/article/973.html,未经许可,不得转载.
import pprint @CountClass def show(data:any): if isinstance(data, dict): #使用pprint打印显示 pp = pprint.PrettyPrinter(indent=4) pp.print(data) #打印json print(json.dumps(data, indent=4, separators=(', ', ': '), ensure_ascii=False)) else: print(data)本文地址:http://47.93.183.36/article/973.html,未经许可,不得转载.
但在测试时发现pprint并没有生效,后来发现只有要显示的内容比较长时,pprint才会美观化显示内容,否则会直接展示。不过在使用中通过对比,pprint还是不如直接使用json.dumps来展示美观,一是pprint只对第一层级进行美化展示,对于dict嵌套dict,内部的dict不会被美化;二是pprint在显示的时候{与内容在一行,效果不咋样。本文地址:http://47.93.183.36/article/973.html,未经许可,不得转载.
本文地址:http://47.93.183.36/article/973.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
手机扫码直接打开本页面 |