我正在使用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
调用之类的东西,那么可以更轻松地提取和使用示例。