python 之匿名函式 lambda

2022-07-15 00:06:17 字數 4623 閱讀 5557

什麼是匿名函式?匿名函式就是不用def關鍵字,使用lambda關鍵字定義的乙個函式。匿名函式簡約而不簡單。

匿名函式的格式:

lambda[ paramters1, paramters2 , ...... ]: expression

1.lambda是乙個表示式,而不是乙個語句

2.lambda 的主體是只有一行的簡單表示式,並不能擴充套件成乙個多行的**塊

匿名函式和常規函式一樣,引數都是根據需要可填可不填,返回的都是乙個函式物件(function object),它們的用法也極其相似。

下面分別用lambda 、def 定義乙個帶有引數和無引數的函式

sum = lambda x, y: x +y

print(sum(1, 0))

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

1

等價於

def

sum(x, y):

return x +y

print(sum(1, 0))

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

1

result = lambda

: false

print(result)

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

等價於

def

result():

return

false

print(result)

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

lambda能夠出現在一些def不能出現的地方,如列表常量中

list1 = [(lambda x: x)(x) for x in range(5)]

print(list1)

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

[0, 1, 2, 3, 4]

lambda可以作為某些函式的引數

import

osdef

read_file(path, name):

filename =path(name)

with open(filename, encoding='

utf-8

') as f:

datas =f.readlines()

print

(datas)

print(read_file(path=(lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))), name="

set_1.py

"))

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py['

# # 集合中不能含list、dict\n

', '

# set2 = \n

', '

# # 通過set()函式傳入可迭代物件建立集合\n

', '

# set3 = set(range(10))\n

', '

# set4 = set(list(range(10)))\n

', '

# set5 = set(tuple(range(10)))\n

', '

# set6 = set("hello")\n

', '

# print(set2)\n

', '

# print(set3)\n

', '

# print(set4)\n

', '

# print(set5)\n

', '

# print(set6)\n

', '

\n', '

# set1 = \n

', '

# set2 = \n

', '

# # 集合的交集, 取共有的元素\n

', '

# result1 = set1 & set2\n

', '

# # 集合的差集,取集合2中不存在的元素\n

', '

# result2 = set1 - set2\n

', '

# # 集合的並集,取集合1、2所有元素\n

', '

# result3 = set1 | set2\n

', '

# # 集合的對稱差,取集合1、集合2中不相同的元素\n

', '

# result4 = set1 ^ set2\n

', '

# print(result1)\n

', '

# print(result2)\n

', '

# print(result3)\n

', '

# print(result4)\n

', '

\n', '

list1 = [2, 2, 4, 5, 6, 6, 9, 0, 9]\n

', '

# 利用集合去重\n

', '

set1 = set(list1)\n

', '

# 再將集合轉成列表\n

', '

list1 = list(set1)\n

', '

print(list1)']

none

lamada 和def定義的函式一樣,也可以巢狀

result = (lambda x: (lambda y: x+y))   #

這就是乙個用lambda實現的閉包,與普通閉包一樣,內嵌lambda表示式可以獲得上層lambda函式的變數

z = result(3)

print(result(3))

print(z(3))

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

lambda>.. at 0x03c3a780>

6

匿名函式的應用

filter函式

#

filter() 函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表,該函式接收兩個引數

#其中第乙個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判斷,然後返回 true 或 false,最後將返回 true 的元素放到新列表中

data = filter(lambda x: x < 5, [3, 6, 7, 9, 0])

print(list(data))

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

[3, 0]

map函式

#

map()會根據提供的函式對指定序列做對映

#第乙個引數 function 以引數序列中的每乙個元素呼叫 function 函式,返回包含每次 function 函式返回值的新列表。

data = map(lambda x: x < 5, [3, 6, 7, 9, 0])

print(list(data))

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

[true, false, false, false, true]

reduce函式

#

reduce() 函式會對引數序列中元素進行累積。

#reduce中的函式 function(有兩個引數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個資料用 function 函式運算,最後得到乙個結果

from functools import

reduce

data = reduce(lambda x, y: x + y, [3, 6, 7, 9, 0])

print(data)

"

d:\program files\python\python37-32\python.exe

" d:/demo/lambda_1.py

25

C 委託,delegate,匿名函式和lambda

1委託就是可以把方法當作引數傳遞 2可以把委託看作乙個類來使用 3委託使用前需要例項化 using system using system.collections.generic using system.linq using system.text private void button1 cli...

python之匿名函式

在某些傳入函式的時候,我們不需要顯式的定義函式,我們可以設定乙個匿名函式來白哦是 比如map函式中,引數為乙個函式以及乙個可迭代物件 我們可以這樣 r map lambda x x x,1,2,3,4,5,6,7,8,9 p list r print p 如上,我們在map中沒有使用已定義好的函式,...

Python之匿名函式

開篇小福利 我們都知道,找工作投簡歷時,假如你運氣好,會得到乙個內推碼,它雖然不能使你一定會被招上,但是卻可以避免你的簡歷被機器過濾掉。那麼,問題來了,你知道像這種內推碼一樣的玩意兒是怎麼生成的嗎?下面將使用乙個簡單的程式,隨機生成一千個類似於內推碼的東西。1.匿名函式 匿名函式的關鍵字為lambd...