s中的跟踪方法执行

2024-06-02 04:46:46 发布

您现在位置:Python中文网/ 问答频道 /正文

如果要跟踪Python中的方法执行,我将实现以下decorator:

def trace(f):
    indent = '   '
    def _f(*args):
        signature = '%s(%s)' % (f.__name__, ', '.join(map(repr, args)))
        print '%s--> %s' % (trace.level*indent, signature)
        trace.level += 1
        try:
            result = f(*args)
            print '%s<-- %s == %s' % ((trace.level-1)*indent, signature, result)
        finally:
            trace.level -= 1
        return result
    trace.level = 0
    return _f

def disabled(f) : return f

# uncomment the following line to disable tracing
# trace = disabled

然后我可以装饰我想要追踪的方法:

^{pr2}$

另一种可能是使用a trace module。在

在Scala中跟踪方法执行的惯用方法是什么?在


Tags: 方法namemapreturndeftraceargsdecorator
1条回答
网友
1楼 · 发布于 2024-06-02 04:46:46

Python中的函数装饰器只是用来表示my_method = trace(my_method)的语法糖。因为Scala也支持一级函数,所以实际上可以做同样的事情。在

不过,有一个陷阱。因为Python是非类型化的,所以函数的类型签名是什么并不重要。Scala关心这个。您可以稍微绕过这个问题,因为Scala对每个参数列表arity都有一个函数特性:Function0Function22。其他人可能有更好的想法,但是您可以为每个函数类型编写一个trace方法(或者一个包含大match的跟踪方法),然后通过trace方法调用函数。您只需要担心参数的数量,因为您可以使用泛型来忽略它们的类型。在

相关问题 更多 >