欢迎访问宙启技术站
智能推送

使用callWithLogger()函数实现Python中的函数调用日志追踪

发布时间:2024-01-17 23:28:21

在Python中,可以通过装饰器函数来实现函数调用的日志追踪。我们可以定义一个装饰器函数callWithLogger,它接受一个函数作为参数,并返回一个新的函数,这个新函数会在每次调用被装饰的函数时打印一条日志。

下面是一个实现callWithLogger的例子:

import logging
import functools

def callWithLogger(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        logging.info("Calling {} with arguments: {} {}".format(func.__name__, args, kwargs))
        result = func(*args, **kwargs)
        logging.info("Function {} returned {}".format(func.__name__, result))
        return result
    return wrapper

在这个例子中,我们首先导入了logging模块,用于打印日志信息。然后,定义了一个装饰器函数callWithLogger,它接受一个函数作为参数,并返回一个新的函数wrapper。

在wrapper函数中,我们首先打印一条日志,显示被装饰函数的名字和参数。然后,调用被装饰的函数,并将返回值保存在result变量中。最后,再打印一条日志,显示被装饰函数的名字和返回值。最后,返回result。

下面是一个使用callWithLogger装饰器的例子:

@callWithLogger
def add(a, b):
    return a + b

@callWithLogger
def multiply(a, b):
    return a * b

result1 = add(1, 2)
result2 = multiply(3, 4)

print("Result of add: ", result1)
print("Result of multiply: ", result2)

在这个例子中,我们定义了两个函数add和multiply,并使用callWithLogger装饰器进行装饰。当我们调用add和multiply函数时,装饰器会自动打印相应的日志信息。最后,我们打印出返回的结果。

运行以上代码,输出如下:

Calling add with arguments: (1, 2) {}
Function add returned 3
Calling multiply with arguments: (3, 4) {}
Function multiply returned 12
Result of add:  3
Result of multiply:  12

可以看到,每次调用被装饰的函数时,都会打印相应的日志信息,包括函数名、参数和返回值。这样,我们就可以通过装饰器函数来方便地追踪函数调用的日志。