Python,如何跟踪函数的跟踪操作?

时间:2017-03-03 13:39:38

标签: python python-3.x

在我的项目中,我将跟踪我的功能上实现的一些操作(如电话号码ecc ecc) 这是最好的解决方案吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

最好的方法是使用装饰器。 下列 定义并应用一个函数装饰器,它计算对装饰函数的调用次数,并为每次调用打印一条跟踪消息:

class tracer:
 def __init__(self, func): # On @ decoration: save original func
  self.calls = 0
  self.func = func
 def __call__(self, *args): # On later calls: run original func
  self.calls += 1
  print('call %s to %s' % (self.calls, self.func.__name__))
  self.func(*args)



@tracer
def spam(a, b, c): # spam = tracer(spam)
 print(a + b + c) # Wraps spam in a decorator object

注意用这个类装饰的每个函数如何创建一个新实例,它有自己保存的函数对象和调用计数器。还要观察* args参数语法如何用于打包和解压任意多个传入的参数。这种通用性使得这个装饰器能够用任意数量的位置参数包装任何函数;此版本尚未对关键字参数或类级别方法起作用,并且不返回结果,但适用于一般概念。

答案 1 :(得分:1)

您可以使用python中内置的跟踪功能。例如:

python -m trace -t your_program.py

这将列出所有被称为

的函数
python -m trace -l paths.py

这将显示所有被称为

的函数的摘要

此处提供更多信息: https://docs.python.org/2/library/trace.html

答案 2 :(得分:0)

最佳解决方案是使用Python magic:decorator,例如,如果要计算函数的执行时间,可以定义这样的装饰:

# This is in Python 3
ex_time = 0
def dec(func):
    def wrapper(*args, **kwargs):
        global ex_time
        ex_time += 1
        return func(*args, **kwargs)
    return wrapper

@dec
def your_func(a):
    # Define your function here
    print(a) # For example

# Let's test
your_func('hello')
your_func('world')
print(ex_time)    

检查结果是否为2。