簡體   English   中英

在這種情況下如何使用功能?

[英]How to use a functional in this case?

我有一個Pandas數據框,想用它做不同的事情。 現在我的函數具有以下結構:

def process_dataframe(df, save_to_file, print_to_screen, etc):
    ...
    if save_to_file:
        df.to_csv(filename)
    elif print_to_screen:
        print df
    elif...

如果不是這樣,這是一個丑陋的情況。 我想改用功能。 函數指針。 這樣的事情。 我創建了幾個函數:

def save_to_file(df, filename):
    return create_function(to_csv, filename???)
def print_to_screen(df):
    return create_function(print)

這意味着我可以將函數的結構改為這一行:

result = process_dataframe(save_to_file)
...
...
def process_dataframe(df, my_functional):
    return my_functional(df)

問題是我不了解語法。 例如,如何在“ save_to_file()”中返回類成員函數“ .to_csv”? “ save_to_file()”的外觀如何? 需要哪個參數?

當然,我可以使用lambda代替定義每個函數。 但是我想了解如何首先定義函數。 下一步,我可以弄清楚自己。

我將確保這實際上是您想要執行的操作,但是假設是這樣,您可以編寫一個調用函數(並通過參數傳遞)的函數,如下所示:

def process_df(df, function, *args, **kwargs):
    function(df, *args, **kwargs)

並定義您的兩個動作。

def print_to_screen(df):
    print df

def save_to_file(df, filename):
    df.to_csv(filename)

然后,您可以根據需要使用它們:

In [193]: df = pd.DataFrame([[1,2,3],[2,4,5]], columns=['a','b','c'])

In [197]: process_df(df, print_to_screen)
   a  b  c
0  1  2  3
1  2  4  5

In [198]: process_df(df, save_to_file, 'temp.csv')
#writes temp.csv

問題是我不了解語法。 例如,如何在“ save_to_file()”中返回類成員函數“ .to_csv”?

我認為您要問的是:

def save_to_file(filename):
    def df_to_csv(df):
        return df.to_csv(filename)
return df_to_csv

並致電:

foo = save_to_file('myfile.csv')
foo(df)  # <- here "df" will be saved to "myfile.csv"

您也可以這樣做(我相信這是您最初想要的):

def save_to_file(df, filename):
    def df_to_csv():
       return df.to_csv(filename)
return df_to_csv

然后這樣稱呼它:

foo = save_to_file(df, 'myfile.csv')
foo()  # <- "df" is saved to "myfile.csv"

但是在我看來,這似乎並不比第一種解決方案丑陋得多,因此您可能需要重新考慮您的方法。

暫無
暫無

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

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