Python中map和reduce中的嵌套 lambda 表达式
我的代码中有一部分是用来判断一个循环的条件:
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"