di中的python闭包类型错误

2024-10-01 09:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从我正在使用的一些算法中获取一些计数值。你知道吗

以下是一个玩具示例:

def Count():
    a = dict(sys=0,dia=0,hr1=0,ox=0,hr2=0,wht=0)
    itr = [0]
    def C(a=a,itr=itr):
        '''closure to sum to a
        '''
        def b( cnt ):
            for k in a:
                #a[k] = a.get(k,None) + cnt.get(k,None) 
                a[k] = a.get(k,0) + cnt.get(k,0)       

            itr.append(1)
            print 'a ', a
            return a
        return b
    c=C()
    return c
    def get():
        return a;

fc=Count()
def toyalgo(fc):
    vitals = ['sys', 'dia', 'hr1', 'ox', 'hr2', 'wht']
    cc = np.random.randint(0,20,size=6)
    cnt = dict(izip( vitals, cc) )
    print 'new count ',cnt
    fc(cnt)
print 'fc'
toyalgo(fc)
toyalgo(fc)

在多个(+8)调用的输出如下所示:

new count  {'wht': 1, 'hr1': 8, 'dia': 18, 'hr2': 13, 'sys': 17, 'ox': 5}
a  {'sys': 17, 'wht': 1, 'ox': 5, 'hr1': 8, 'dia': 18, 'hr2': 13}
new count  {'wht': 2, 'hr1': 12, 'dia': 12, 'hr2': 19, 'sys': 13, 'ox': 1}
a  {'sys': 30, 'wht': 3, 'ox': 6, 'hr1': 20, 'dia': 30, 'hr2': 32}

不幸的是,在实际数据集上运行时,如果没有

TypeError: unsupported operand type(s) for +: 'int' and 'list'

我认为这是由于缺少一个值,所以尝试从None更改为0,但没有运气。你知道吗

任何帮助都太好了!你知道吗

--get()只是获取闭包变量a,即计数。(未经测试不确定def get(a=a): return a是否是正确的方法……)

--return fc(cnt)不走运;尽管我确实看到了它是另一个问题的解决方案,所以也有同样的类型错误。你知道吗

---编辑--- 很好的评论! 使用not isinstance()进行调试时检测到错误。正在通过一个列表!你知道吗


Tags: nonegetreturndefsysoxfcprint