带有ipywidgets的kwargs的默认值

时间:2017-11-19 11:43:37

标签: python python-3.x jupyter-notebook kwargs

我正在创建一个使用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笔记本中的输出如下所示:

Jupyter Notebooks result

如您所见,交互式滑块代码指定要在我的函数中查找和返回的值。

但是我还想将所有**kwargs的默认值设置为零。我发现的所有答案都依赖于data_set的一些知识或将要传递的参数。我只知道参数名称将引用我的字典中的键,并且值为1-100,但我不知道如何设置默认值,就像我对year一样?

NB。很抱歉,如果这是非常基本的或之前被问过,我还是Python的新手,所以不知道该搜索什么。此外,如果您发现我的代码有任何明显的改进,请在评论中启发我!

1 个答案:

答案 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)