[英]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.