python - 使用 JupyterNotebook 从 ipywidget 函数定义全局变量
问题描述
我正在使用 ipywidgets 来允许用户选择一些值,并且我想将小部件内部的函数结果分配给函数外部的变量并在笔记本的下一个单元格上使用它(我尝试使用全局变量但是我无法让它工作):
def issuer_choice():
from ipywidgets import widgets
from IPython.display import display, clear_output
import pandas as pd
def myfunc(idnum):
return data.loc[idnum]['cod']
def on_button_clicked(b):
global ticker
ticker = myfunc(w.value)
with output:
clear_output()
print('Ticker CIQ: ' + ticker)
data = pd.read_csv('data.csv', sep=',', index_col = 1)
w = widgets.Dropdown(options=list(data.index), description = 'Label:')
button = widgets.Button(description="Obtain ID")
output = widgets.Output()
display(w)
display(button, output)
button.on_click(on_button_clicked)
return ticker
当调用此函数result = issuer_choice()
并单击按钮时,代码ticker
每次都能正确打印,这意味着在选择选项时会更新函数内部的值。但是,调用print(result)
下一个单元格打印None
,意思ticker
是没有被分配到result
?
*data.csv 只是一列 DataFrame,其中存储了 ID 和名称的列表。
我认为它必须与ticker
变量的范围有关,但我不知道。我将不胜感激任何帮助。
解决方案
如果您要求,请global ticker
确保ticker
在您的全局范围内已经定义了名称,即使您将其设置为 None,您也可以稍后在全局范围内调用它。
此外,如果您用read_csv
提供相同行为的简单假数据框替换调用之类的内容,则可以更轻松地获取和使用您的示例。
ticker = None
def issuer_choice():
from ipywidgets import widgets
from IPython.display import display, clear_output
import pandas as pd
def myfunc(idnum):
return data.loc[idnum]['cod']
def on_button_clicked(b):
global ticker
ticker = myfunc(w.value)
with output:
clear_output()
print('Ticker CIQ: ' + str(ticker))
data = pd.Series({'A':1, 'B': 2, 'C': 3})
data = data.to_frame(name='cod')
w = widgets.Dropdown(options=list(data.index), description = 'Label:')
button = widgets.Button(description="Obtain ID")
output = widgets.Output()
display(w)
display(button, output)
button.on_click(on_button_clicked)
推荐阅读
- octave - 错误:第 8 行第 12 列附近的“y”未定义错误:从第 8 行第 3 列的 computeCost 调用
- python - 生成特定格式的元组
- python - 正则表达式在找到“%”后停止搜索
- mysql - 将 .NET Core Web API 连接到不同 docker 容器上的 MySQL
- dsl - Xtext 语法更多抽象类实例化
- python - Python字符串不匹配
- python - 在 python 2.7 中使用 smtp 时出现 keyerror
- c# - INSERT 语句不添加任何数据而不会引发错误
- python - 合并排序 Python 实现?实施中有什么问题
- api - GraphQL API - 任何用于测试它的自动化工具?