为什么代码显示以下代码的 NameError

Why is the code showing NameError for the following code

from functools import reduce
li = [5, 8, 10, 20, 50, 100] 
sum = reduce((lambda x,y: x*(1/2**li.index(x))) + y*(1/2**li.index(y)) , li)
print(sum)

显示的错误是 NameError: name 'y' is not defined

首先,你不应该覆盖 sum 因为它是内置的,但问题不在那里。 问题在于括号。在加号之前关闭 lambda 括号。你可以尝试这样的事情:

reduce(lambda x,y: x*(1/2**a.index(x)) + y*(1/2**a.index(y)), li)