python - 如何从内部函数访问在外部函数中定义的变量
问题描述
我有一个仪表板,其中根据用户选择的参数定义和显示数据框。我想添加一个按钮,允许用户在单击时下载先前定义的数据框。以下是我定义的用于定义和显示数据框的函数:
def filtra_dati(selezione, canale, metrica):
output.clear_output()
if canale == "ALL":
df = canali_weekly.loc[(slice(None), slice(selezione[0],selezione[1])), list(metrica)]
else:
df = canali_weekly.loc[(canale, slice(selezione[0],selezione[1])), list(metrica)]
with output:
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
display(df)
我尝试嵌套一个新函数 ( on_button_clicked()
) 来添加下载按钮:
def filtra_dati(selezione, canale, metrica):
output.clear_output()
if canale == "ALL":
df = canali_weekly.loc[(slice(None), slice(selezione[0],selezione[1])), list(metrica)]
else:
df = canali_weekly.loc[(canale, slice(selezione[0],selezione[1])), list(metrica)]
with output:
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
display(df)
def on_button_clicked(b):
with output:
print("Button clicked.")
df.to_excel("~/Downloads/df.xlsx")
但它不起作用,我收到未定义数据框的错误,这让我认为我无法使用此解决方案访问上面定义的变量。
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-10-0246293b959d> in on_button_clicked(b)
42 with output:
43 print("Button clicked.")
---> 44 df.to_excel("~/Downloads/df.xlsx")
45
46
NameError: name 'df' is not defined
我读了一些关于嵌套函数的东西,但我不确定这就是我要找的。
编辑 这是完整的代码:
kpi = [k for k in canali_weekly.columns]
dropdown_canali = widgets.Dropdown(options = crea_opzioni_con_ALL(canali_weekly.index.get_level_values(level=0)), description='Canali:')
select_metriche = widgets.SelectMultiple(options=kpi, value= kpi, rows=5, description='Metriche:')
download_dataframe = widgets.Button(description='Scarica i dati', icon='check')
def filtra_dati(selezione, canale, metrica):
output.clear_output()
if canale == "ALL":
df = canali_weekly.loc[(slice(None), slice(selezione[0],selezione[1])), list(metrica)]
else:
df = canali_weekly.loc[(canale, slice(selezione[0],selezione[1])), list(metrica)]
with output:
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
display(df)
def on_button_clicked(b):
with output:
print("Button clicked.")
df.to_excel("~/Downloads/df.xlsx")
def week_eventhandler(change):
filtra_dati(change.new, dropdown_canali.value, select_metriche.value)
def canali_eventhandler(change):
filtra_dati(intRange_week.value, change.new, select_metriche.value)
def metriche_eventhandler(change):
filtra_dati(intRange_week.value, dropdown_canali.value, change.new)
intRange_week.observe(week_eventhandler, names='value')
dropdown_canali.observe(canali_eventhandler, names='value')
select_metriche.observe(metriche_eventhandler, names='value')
download_dataframe.on_click(on_button_clicked)
解决方案
推荐阅读
- javascript - 在 onclick javascript 效果之后,我可以在 css 中定位一个 :hover 函数吗?
- c# - 获取数组中的最高数字,然后在该数组中添加一个新值并使用前面的 +1 不起作用 - C#
- sql - 将 2 个单独列的总和与 SQL 语句进行比较
- python - matplotlib 中的多行动画
- python - 无法从python中的函数成功获取返回
- optaplanner - 为什么在调用 calculateScore 之前没有设置我的 PlanningVariables?
- python - DISCORD PY Bot 没有响应命令,没有回溯错误
- javascript - 如何获取在 Chrome 标签中播放的音频名称
- javascript - 在 div 外部单击应该为 div 添加抖动效果;点击里面不应该有任何变化
- discord.py - 将排行榜分为页面 discord.py