派遣词典(HomeWork)

时间:2014-12-27 14:34:48

标签: python eclipse python-3.x

def get_map_iterator(slist,gfunc=None):
index = 0
def Next():
    nonlocal index
    x = slist[index]
    index = index + 1
    return x
def has_more():
    if slist[index] != None :
        return True
    else:
        return False

dispatch = {
'Next': lambda: gfunc(Next()),
'has_more': has_more
}
return dispatch

it = get_map_iterator((1,3,6))
for i in range(i,6):
it['Next']()

it = get_map_iterator((1,3,6),lambda x:1/x) 
while it['has_more'](): 
it['next']() 

P.S 这段代码的结果应该是:

1
3
6
no more items
no more items

1.0
0.33333
0.166666

对gfunc的更改将如何影响这一点,我的意思是如果我确实得到一个函数或者我没有得到一个函数,我将需要更改才能使其工作

1 个答案:

答案 0 :(得分:1)

get_map_iterator()返回一个函数对象(dispatch)。您正试图将该对象视为字典。

您希望调用代替:

while it('has_more'):
    it('Next')

您的dispatch()函数本身不会返回另一个函数对象,因此您不会调用it()返回的任何内容。

您的has_more路线失败了:

>>> it('has_more')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 17, in dispatch
  File "<stdin>", line 9, in has_more
TypeError: next expected at least 1 arguments, got 0

大概是因为您打算使用您定义的Next()函数,而不是内置的next() function

但是,即使修复也无法获得输出,因为slist[0] != slist[1]

听起来好像是在尝试实际返回字典

dispatch = {
    'Next': lambda: gfunc(Next()),
    'has_more': has_more
}
return dispatch

使用的返回值,就像你最初使用的那样,通过一个键查找可调​​用对象,然后调用它。