据我所知,在Python中,函数外部声明的变量可以被后者访问,但不能修改(除非我们在函数中将它们声明为全局变量,请参见https://www.datacamp.com/community/tutorials/scope-of-variables-python)。在
我正在学习使用Bokeh,我想通过回调修改实例(下拉列表、表…)。根据前一段,如果后者未声明为全局实例,则回调无法修改这些实例。但是下面的代码示例可以工作。。。在
userList = ['a', 'b', 'c', 'd']
folderList = ['e', 'f', 'g', 'h']
s = MultiSelect(options=userList, size=4, width=1000)
ti = TextInput(placeholder='Enter reference')
def populateDropdown(attr, old, new):
#nonlocal s, ti
if new == 0:
options = userList
else:
options =folderList
s.options = options
ti.callback = CustomJS(args=dict(options=s.options, s=s),code="s.options =
options.filter(i =>i[0].toLowerCase().includes(cb_obj.value.toLowerCase()));console.log(options);")
usersFoldersChoice = RadioButtonGroup(labels=["Users", "Folders"])
usersFoldersChoice.on_change('active', populateDropdown)
多选择预先填充userlist
。有两个单选按钮,如果单击“文件夹”,则会触发回调“populateDropdown”。此回调必须用folderList
重新填充multiselect s
,还必须更新链接到文本输入ti
的回调。在这里,s
和{
另外,如果我不明白为什么我必须更新链接到ti
的回调,以便将s
的更改考虑在内(起初,回调在声明期间被直接分配给ti
,但它没有起作用…)
提前感谢您的澄清!在
你的直觉不太对。不能将赋值给函数外部的变量。也就是说,此函数不会在函数外部更新
x
的值:但是,如果函数外部的对象是可变的,即可以“就地”修改它们,那么通过调用它们上的方法来更新它们是没有问题的。例如:“
^{pr2}$这就是为什么Bokeh回调可以操作在函数之外定义的小部件或数据源对象。在
我不太明白你最后一个问题。在
相关问题 更多 >
编程相关推荐