Python中map和reduce中的嵌套 lambda 表达式

2 投票
2 回答
3495 浏览
提问于 2025-04-16 12:21

我的代码中有一部分是用来判断一个循环的条件:

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

这个代码的目的是检查一个Python数组的某个切片里是否包含几个特定的字节值。

我遇到的错误是:

NameError: global name 'y' is not defined

所以我觉得这可能是作用域的问题。但是我现在想不出有什么办法可以实现我想要的功能。

2 个回答

0

这肯定不是作用域的问题,明显是一个不符合Python风格的写法。 我试着理解了一下,发现你需要把y传递给这个lambda表达式。

reduce(operator.or_,
       map(lambda y: reduce(operator.or_, map(lambda x: x[0] == y, data[testedoffset:]))
                ,#Where is y
           , footers))
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"

撰写回答