簡體   English   中英

無法理解lambda地圖功能

[英]unable to understand lambda map function

尋求指導以了解lambda-map函數。 在下面,我看到文件“ feedback”逐行讀取並存儲在列表“ feedback”中。 我無法理解變量x。 我在任何地方都看不到變量“ x”。 有人可以幫助我理解該聲明嗎?

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

map函數將為列表中的每個元素執行給定的函數。

在您的代碼中,map函數將獲得lambda x:x[:-1] 您可以像這樣讀取:對於f.readlines()中的每個x,返回除x的最后一個元素以外的所有內容。

因此x將是文件的每一行。 lambda x:您可以將其視為def thing(x):

我用標准功能替換了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()

也許會有所幫助。

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

請記住,在這里解釋lambda時已解決,但這不是您的特定示例選擇的實現。 建議:

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

另請參閱“讀取沒有換行符的文件”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM