我正在创建一个使用ipywidgets
为不同输入创建滑块的函数,我想设置这些滑块的默认值。
同时,我希望我的函数接受**kwargs
未定义的值集,其中关键字指示我的滑块应该作用于字典中的哪些项。作为一个简单的测试案例:
from ipywidgets import *
@interact(year = (2011,2021,1),
cat = (0,100,1),
man = (0,100,1)) # only make sliders for year, cat, man
def test(year = 2011, **kwargs): #default year, now I only need default everything else
data_set = {'cat':("Cat in the hat", 1000),
'dog':("Dog and bone", 1750),
'man':("Man about the house",114)} #info on cat, dog and man
for dictKey, growth in kwargs.iteritems():
itemName, itemValue = data_set[dictKey] #use kw argument to look in data set
newValue = itemValue * (1 + growth * (year - 2011)/100)
print("Item was: {}\nInitial value: {} \nGrowth: {}%\nNew Value: {}\n".format(itemName, itemValue, growth, newValue))
Jupyter笔记本中的输出如下所示:
如您所见,交互式滑块代码指定要在我的函数中查找和返回的值。
但是我还想将所有**kwargs
的默认值设置为零。我发现的所有答案都依赖于data_set
的一些知识或将要传递的参数。我只知道参数名称将引用我的字典中的键,并且值为1-100,但我不知道如何设置默认值,就像我对year
一样?
NB。很抱歉,如果这是非常基本的或之前被问过,我还是Python的新手,所以不知道该搜索什么。此外,如果您发现我的代码有任何明显的改进,请在评论中启发我!
答案 0 :(得分:0)
类ZeroDict
扩展字典,并在请求不存在的密钥时返回0:
class ZeroDict:
def __init__(self, dictionary):
self.dictionary = dictionary
def __getitem__(self, ref):
try:
return self.dictionary[ref]
except KeyError:
return 0
def f(**kwargs):
kwargs = ZeroDict(kwargs)
print (kwargs['a']+kwargs['b']*kwargs['c']) # print(a+b*c)
f()
f(a=4)