织梦CMS - 轻松建站从此开始!

沙龙国际-沙龙国际娱乐-沙龙国际网上娱乐

当前位置: 主页 > 沙龙国际客户端 >

iter迭代无线循环错误

时间:2017-07-17 18:40来源:未知 作者:admin 点击:
我在阅读werkzeug中实现的 flask Header 类的时候,碰到了这个装饰器。 def native_itermethods(names): def setmethod(cls, name): itermethod = getattr(cls, name) setattr(cls, 'iter%s' % name, itermethod) listmethod = lambda

我在阅读werkzeug中实现的flask Header类的时候,碰到了这个装饰器。

def native_itermethods(names):

    def setmethod(cls, name):
        itermethod = getattr(cls, name)
        setattr(cls, 'iter%s' % name, itermethod)
        listmethod = lambda self, *a, **kw: list(itermethod(self, *a, **kw))
        listmethod.__doc__ = \
            'Like:py:meth:`iter%s`, but returns a list.' % name
        setattr(cls, name, listmethod)

    def wrap(cls):
        for name in names:
            setmethod(cls, name)
        return cls
    return wrap

这部分代码会对该类下创建一个iter开头的方法。比如get会创建出一个iterget。并把原来的get的返回值改为迭代iterget的列表。这是我理解的如果有错误请指正。

我想要对上边的装饰器进行测试验证以下是我的代码

iterget = lambda d, *arg, **kw: d.iterget(*arg, **kw)

@native_itermethods(['get'])
class A(object):

    def __init__(self):
        self._names = [('mink', '123'), ('kk', '1211')]

    def __iter__(self):
        yield iter(self._names)

    def get(self, name):
        for key, value in iterget(self):
            if key == name:
                yield key, value
                
if __name__ == '__main__':
    a = A()
    print dir(a)
    print a.get('mink')

按照我的理解上面装饰器的结果应该返回一个元组列表,但是会爆出以下错误

是我例子写错了么还是,我对上述代码没有理解对。

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容