2

我的代码当前包含,作为while循环条件的一部分:

reduce(operator.or_, map(lambda y: reduce(operator.or_, map(lambda x: x[0] == y, data[testedoffset:])), footers))

它的目的是检查 python array.array 实例的给定切片是否包含几个特定字节值之一。

我得到的错误是:

NameError: global name 'y' is not defined

所以我很确定这是一个范围界定问题。但我想不出从这里做我想做的事的方法。

4

2 回答 2

3

我看到您自己找到了答案,但是当您在这里时……该代码确实可以使用一些工作。

我不完全确定您为什么要基于data[testedoffset:]整个footers序列映射该表达式。这似乎没有任何影响,除非你__getitem__有副作用。

但整件事map + reduce + operator.or_让我感到很沮丧。

尝试更多类似的东西:

y = 'whatever'
if any(x[0] == y for x in data[offset:]):
    print "yep, it's in there"
于 2011-02-23T03:08:58.053 回答
0

这肯定不是范围界定问题,它显然是一个非pythonic表达式。这是我理解它的尝试,我发现您必须将 y 传递给 lambda 表达式。

reduce(operator.or_,
       map(lambda y: reduce(operator.or_, map(lambda x: x[0] == y, data[testedoffset:]))
                ,#Where is y
           , footers))
于 2011-02-23T02:32:46.510 回答