什麼是匿名函式?匿名函式就是不用def關鍵字,使用lambda關鍵字定義的乙個函式。匿名函式簡約而不簡單。
匿名函式的格式:
lambda[ paramters1, paramters2 , ...... ]: expression
1.lambda是乙個表示式,而不是乙個語句
2.lambda 的主體是只有一行的簡單表示式,並不能擴充套件成乙個多行的**塊
匿名函式和常規函式一樣,引數都是根據需要可填可不填,返回的都是乙個函式物件(function object),它們的用法也極其相似。
下面分別用lambda 、def 定義乙個帶有引數和無引數的函式
sum = lambda x, y: x +yprint(sum(1, 0))
"d:\program files\python\python37-32\python.exe
" d:/demo/lambda_1.py
1
等價於
defsum(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
等價於
defresult():
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可以作為某些函式的引數
importosdef
read_file(path, name):
filename =path(name)
with open(filename, encoding='
utf-8
') as f:
datas =f.readlines()
(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...