2017-11-19 1 views
0

ipywidgets을 사용하여 다양한 입력에 대한 슬라이더를 만드는 함수를 만들고 있는데,이 슬라이더에 기본값을 설정하고 싶습니다.ipywidgets를 사용하는 kwargs의 기본값

동시에, 내 함수가 정의되지 않은 값 집합을 **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의 기본값도 0으로 설정하고 싶습니다. 내가 찾은 모든 대답은 data_set에 대한 지식이나 전달할 인수에 의존합니다. 인수 이름이 사전에있는 키를 참조하며 1-100의 값을 갖음을 알고 있습니다. 그러나 year처럼 기본값을 설정하는 방법을 모르겠습니다.


NB. 미안합니다. 이것이 매우 기본 적이거나 이전에 물어 본 적이 있다면, 아직 파이썬에 익숙하지 않아서 무엇을 검색해야할지 모르겠습니다. 또한 코드 개선이 눈에 잘 띄는 경우 의견에 제게 알려주십시오!

클래스 ZeroDict는 사전을 확장하고 inexistent 키가 요청 될 때마다 0을 반환

답변

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) 
관련 문제