【问题标题】:'DataFrame' object is not callable error when using Decorator wrapper for run time使用装饰器包装器进行运行时,“DataFrame”对象不是可调用错误
【发布时间】:2021-02-21 13:16:47
【问题描述】:

我正在尝试返回一个 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())

【问题讨论】:

    标签: python dataframe python-decorators


    【解决方案1】:

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

    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())
    

    【讨论】:

    • 那行得通。我不知道我是怎么错过的,非常感谢您指出这个错误
    • 发生@FahadVadakkumpadatah。很高兴它奏效了。我已经发布了一个经过调整的更好版本的代码。
    猜你喜欢
    • 2013-01-10
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2020-08-19
    • 2012-08-11
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多