簡體   English   中英

蟒蛇3。 創建動態生成的函數列表

[英]Python3. Create list of dynamically generated functions

我正在構建基於熊貓的簡單報告工具,我希望報告開發人員能夠通過使用函數來轉換數據框。 我看到它的方式報告開發人員在 UI 數據庫連接、sql 查詢和一堆 python 函數中以字符串格式創建,然后將執行這些函數。

我的課看起來像這樣

class ReportSQLDataset:
    def __init__(self, connection, sql, transforming_functions:list):
        self.connection = connection
        self.sql = sql
        self.dataframe = None
        self.transforming_functions = transforming_functions
        
    def load_dataframe(self):
        self.dataframe = pd.read_sql(self.sql, self.connection)

    def run_transforming_functions(self):
       for code in self.transforming_functions:
           # Here I want execute code from strings provided by user

變換函數的例子

def some_transformation(df):
    # Do something
    return df

有沒有想法如何在不將這些功能放在全球范圍內的情況下實現這一目標?

現在我想出了這個解決方案

def function_builder(code):
    co = compile(code, 'f', 'exec')
    fname = co.co_names[0]
    eval(co)
    return locals()[fname]

在我的run_transforming_functions方法中它看起來像這樣

def run_transforming_functions(self):
       for code in self.transforming_functions:
           self.dataframe = function_builder(code)(self.dataframe)

不確定這是否是最佳解決方案,但它可以滿足我的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM