无法理解lambda地图功能

时间:2019-01-12 13:49:57

标签: python

寻求指导以了解lambda-map函数。在下面,我看到文件“ feedback”逐行读取并存储在列表“ feedback”中。我无法理解变量x。我在任何地方都看不到变量“ x”。有人可以帮助我理解该声明吗?谢谢

f = open('feedback.txt','r') 
feedback = list(map(lambda x:x[:-1],f.readlines())
f.close()

4 个答案:

答案 0 :(得分:2)

map函数将为列表中的每个元素执行给定的函数。

在您的代码中,地图函数将获得lambda x:x[:-1]。 您可以像这样阅读:对于f.readlines()中的每个x,返回除x的最后一个元素以外的所有内容。

因此x将是文件的每一行。 lambda x:会显示为def thing(x):

答案 1 :(得分:2)

我用标准功能替换了lambda:

def read_last(x):  #x means a line
  return x[:-1]

f = open('feedback.txt','r') 
feedback = list(map(read_last, f.readlines())
f.close()

也许会有所帮助。

答案 2 :(得分:0)

lambda函数是一个简单的匿名函数,它可以接受任意数量的参数,但是只有一个表达式。

lambda arguments : expression

它是匿名的,因为我们尚未将其分配给对象,因此它没有名称。

示例f和g有点相同:

def f(x):
    # take a string and return all but last value
    return x[:-1]

g = lambda x: x[:-1]

如此:

f('hello') == g('hello') #True ->'hell'

但是g不是我们使用lambda的方式。整个目的是避免分配;)

现在map接受一个函数并将其应用于iteratable:它返回Python 3+中的生成器,因此使用列表将生成器的大小写转换为列表

data = ['we are 101','you are 102','they are 103']

print(list(map(lambda x:x[:-1],data)))

#->['we are 10','you are 10','they are 10']

原则上,与传递函数相同:

data = ['we are 101','you are 102','they are 103']

print(list(map(f,data)))

,但通常更快,更强大。我爱lambdas

答案 3 :(得分:0)

请记住,虽然在这里解释了lambda,但并不是您的特定示例选择的实现。建议:

f = open('feedback.txt', 'r')
feedback = f.read().splitlines()
f.close()

See also 'Reading a file without newlines'.