'DataFrame' 使用 Decorator 包装器 运行 次时出现对象不可调用错误

'DataFrame' object is not callable error when using Decorator wrapper for run time

我正在尝试 return 一个 csv 文件并使用装饰器来查找 运行 时间。 (以下代码是相同的示例代码。) 但我得到一个错误,它是“'DataFrame' 对象不可调用”

import pandas as pd
import time
import functools

def timer(func):
    @functools.wraps(func)
    def wrapper_timer():
        start_time = time.perf_counter()  
        value = func()
        end_time = time.perf_counter()  
        run_time = end_time - start_time  
        print(f"Finished {func.__name__!r} in {run_time:.4f} secs")
        return value
    return wrapper_timer()


@timer
def generate_df():
    file="file.csv"
    df = pd.read_csv(file)
    return df
df = generate_df()


if __name__ == '__main__':
    print(df.head())

您应该在装饰器中返回函数引用

return wrapper_timer

而不是调用它。

更好的代码编写方式,

import pandas as pd
from time import time
import functools


def timer(func):
    @functools.wraps(func)
    def wrapper_timer(*args, **kwargs):
        start_time = time()
        value = func(*args, **kwargs)
        run_time = time() - start_time  
        print(f"Finished {func.__name__!r} in {run_time:.4f} secs")
        return value
    return wrapper_timer


@timer
def generate_df(file):
    df = pd.read_csv(file)
    return df


if __name__ == '__main__':
    filepath = "/home/vishnudev/Downloads/CF-Event-equities-21-Feb-2021.csv"
    df = generate_df(filepath)
    print(df.head())