python 匿名函式

2022-07-02 22:15:10 字數 2990 閱讀 9964

lambda 本身不是乙個函式,而是乙個關鍵字,它告訴python建立乙個函式並在適當的位置使用它,而不是通過乙個名稱引用它。

>>> filter_me=[1,2,3,4,5,6,7,8,11]

>>> func=lambda x:x%2==0

>>> result=filter(func,filter_me)

>>> print(result)

>>> print(*result)

2 4 6 8

>>> result=filter(lambda x:x%2==0,filter_me)

>>> print(*result)

由於缺少名稱,lambda建立的函式被稱為匿名函式,可以使用lambda 語句的結果給函式繫結乙個名稱。該名稱只在建立名稱的作用域內可用

lambda只能是乙個簡單函式,並且不能包含其他語句,比如為變數建立乙個名稱。在lambda內部,只能執行有限的操作,比如測試相等性、將兩個數相乘或者以特定的方式使用其他已經存在的函式。只能使用傳遞到lambda函式的引數。然而,可以通過使用and/or 操作。

lambda主要用在內建函式map和filter中。通過使用lambda,這些函式能夠以緊湊的方式執行一些大的操作,而不必使用迴圈。

2 map短路迴圈:

map是乙個特殊的函式,它用於需要對列表中的每個元素執行乙個指定的操作的情形。

>>> map_me=['a','b','c','d']

>>> result=map(lambda x:"the letter is %s"%x,map_me)

>>> print(*result)

如果向map中傳遞乙個列表 或者元組 的列表,則它期待得到列表。主列表中的每個序列應該有相同數目的元素。

>>> # use map with a list of lists,to re-order the output

>>> map_me_again=[[1,2,3],[4,5,6]]

>>> result=map(lambda list:[list[1],list[0],list[2]],map_me_again)

>>> print(*result)

[2, 1, 3] [5, 4, 6]

map總是返回乙個迭代器。可以傳遞給map乙個非匿名函式的名稱,它仍然以相同的方式執行。

3 列表解析

>>> everything=[1,2,3,4,5,6,7,8,12]

>>> print([x for x in everything if x%2==0])

[2, 4, 6, 8, 12]

這是將列表的一部分放入迴圈中的一種簡潔實用的方式。列表中只有相關的部分,也就是在程式中希望得到的部分才會被加入到迴圈中。

列表解析可以包括迴圈和條件語句,能夠提供更強大的做出決策的能力。而lambda只允許執行乙個簡單表示式。

在大多數情況中,列表解析將比其他方式執行得更快。

4 為迴圈生成迭代器

python有乙個能夠建立迭代器的特殊特性,即range函式:

>>> f=range(10,20)

>>> print(*f)

10 11 12 13 14 15 16 17 18 19

如果只給range傳遞乙個數值,那麼它將從0數到該數值。這個數值既可以是正數,也可以是負數

如果只希望每隔乙個數值或者每隔兩個數值列印數值,可以使用乙個可選的第三個引數step

>>> f=range(-1)

>>> print(*f)

>>> for number in range(5,55,4):

print("number from 5 to 55 by fours:%d"%number)

range返回乙個行為與列表類似的迭代器物件。注意這個物件沒有公共介面。而僅有私有方法。dir(range(0,10)

可以通過同列表、序列以及字典相同的解除引用操作符(方括號)來訪問它,當使用方括號訪問時,是在告訴python要呼叫列表、元組或字典的__getitem__方法,range物件具有這個私有方法

>>> f=range(2)

>>> f[0]

05 使用字典的特殊字串替換

使用字典進行字串替換

>>> person=

>>> print("%(name)s,%(camera)s,%(baseball_team)s"%person)

james,nikon,angels

圓括號中的資訊是鍵名,它的值將從字典中得到並替換為字串。圓括號後面指定插入的資料型別,s 字串,i 整數、j虛數、l長整數

>>> import string

>>> person=

>>> person["height"]=1.6

>>> person["weight"]=80

>>> t=string.template("$name is $height m high and $weight kilos")

>>> print(t.substitute(person))

james is 1.6 m high and 80 kilos

lambda允許編寫乙個簡單的函式而不必在其他地方宣告它。編寫和執行這些函式不需要繫結乙個名稱,因此它們稱為匿名函式。map在列表上操作,當用於乙個簡單列表時,將針對列表從頭到尾的每個元素執行乙個函式。當提供給map多個列表,或者列表中包含列表時,它具有更複雜的行為。

列表解析是指在解除對序列的引用的方括號中執行有限量**的能力,只有滿足中括號中標準的那些元素被返回。通過列表解析可以簡單快速的訪問乙個序列的指定成員

range操作能夠提供起始於任意數值並且終止於任意數值的數值列表,所以可以用來生成乙個通常用於for迴圈的迭代器。

除了簡單的字串替換以外,還可以提供乙個具有格式說明符的字串,這些格式說明符通過使用一種特殊的語法引用字典中的鍵名。這個形式允許繼續使用格式說明符選項

string.template模組中為這種簡單的基於鍵名字串格式化提供了一種替換形式。它提供了略微簡單一點的格式,在允許使用者指定模板時更適合。生成套用信函是使用這個方法的乙個例子。

python匿名函式

例如 a 100 b a 這樣100只會有乙份,a和b只是指向了同乙個位置,改變a的值b也會跟著改變 當我們用id 變數 檢視兩變數的位址是相同的 可變型別 列表,字典 不可變型別 除了可變型別剩下的都是不可變型別 不可變型別舉例 a world 可以輸出a 0 整個字串也可以修改,但是要修改a 0...

python 匿名函式

在python中,對匿名函式提供了有限支援。還是以map 函式為例,計算f x x2時,除了定義乙個f x 的函式外,還可以直接傳入匿名函式 map lambda x x x,1,2,3,4,5,6,7,8,9 1,4,9,16,25,36,49,64,81 通過對比可以看出,匿名函式lambda ...

python 匿名函式

1.匿名函式定義規則 lambda 形參 返回值 def fun args,kwargs return args,kwargs print lambda args,kwargs args,kwargs def add x,y return x y from functools import redu...