您将无法使用 **kwargs 解决此问题。正如PEP468中所述,
“它们 [关键字参数] 不起作用的唯一原因是解释器将排序信息扔掉了。” “从 3.5 版开始,Python 将保留传递给函数的关键字参数的顺序”
因此,如果您想获得这种行为,您应该:在使用“交互式”时命名您的参数:
from ipywidgets import interactive
from IPython.display import display
import numpy as np
def myfun(**kwargs):
return np.sum(list(kwargs.itervalues()))
w=interactive(myfun,var1=1,var2=2,var3=3,var4=4)
display(w)
或者,如果你真的想使用字典,据我所知,最好是自己构建小部件,而不使用“交互式”。你可以这样做:
from IPython.display import display,clear_output
from ipywidgets import widgets
from collections import OrderedDict
var_dict = OrderedDict([('var1',1),('var2',2),('var3',3),('var4',4)])
def myfct(change,list_widgets):
clear_output()
print np.sum([widget.value for widget in list_widgets])
list_widgets=[]
# create the widgets
for name,value in var_dict.iteritems():
list_widgets.append(widgets.IntSlider(value=value,min=value-2,max=value+2,description=name))
# link the widgets with the function
for widget in list_widgets:
widget.observe(lambda change:myfct(change,list_widgets),names='value',type='change')
# group the widgets into a FlexBox
w = widgets.VBox(children=list_widgets)
# display the widgets
display(w)
享受 :-)