Python3學習筆記09 匿名函式lamdba

2021-09-12 09:14:42 字數 1653 閱讀 6604

關鍵字lambda表示匿名函式,冒號前面,面的x表示函式引數。

匿名函式有個限制,就是只能由乙個表示式,不用寫return,返回值就是該表示式的結果。

匿名函式有個好處,因為函式沒有名字,不必擔心函式名稱衝突。此外,匿名函式也是乙個函式物件,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式:

f=lambda x:x*x

print(f)

print(f(5))

輸出結果:

25同樣,也可以把匿名函式作為返回值返回,比如:

def build(x,y):

return lambda:x*x+y*y

print(build(2,3))

print(build(2,3)())

輸出結果為:

13python對匿名函式的支援有限,只有一些簡單的情況下可以使用匿名函式。

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。

def now():

print('2019/3/11')

d=now

print(d())

執行結果:

2019/3/11

none

函式物件有乙個__name__屬性,可以拿到函式的名字:(雙下劃線)

print(now.name)

print(d.name)

執行結果:

nownow

現在假設我們要增強now()函式的功能,比如,在函式嗲用前後自動列印日誌,但又不希望修改now()函式的定義,這種在**執行期間動態增加功能的方式,稱之為「裝飾器」(decorator)。

本質上,decorator就是乙個返回函式的高階函式。所以,我們要定義乙個能列印日誌的decorator,可以定義如下:

#在函式呼叫前後自動列印日期,但又不修改now()函式的定義,即『裝飾器』

def log(func):

print('call%s():'% func.__name__)

return func(*args,**kw)

@log #把@log放到now()函式的定義處,相當於執行了語句now=log(now)

def now():

print('2019/3/11')

print(now())

執行結果:

callnow():

2019/3/11

none

為了編寫可維護的**,我們把很多函式分組,分別放在不同的檔案裡,這樣每個檔案包含的**就相對較少,很多編碼語言都採用這種組織**的方式。在python中,乙個.py檔案就稱之為乙個模組(module)。

為了避免模組名衝突,python又引入了按目錄來組織模組的方法,成為包)package)。

請注意,每乙個包目錄下面都會有乙個__init__.py的檔案,這個檔案是必須存在的,否則,python就把這個目錄等成普通目錄,而不是乙個包。init.py可以是空檔案,也可以有python**,因為__init__.py本身就是乙個模組,它的名字就是包的名字。

Python3學習筆記09 字典

字典是另一種可變容器模型,且可儲存任意型別物件。字典的每個鍵值 key value 對用冒號 分割,每個對之間用逗號 分割,整個字典包括在花括號 中 鍵必須是唯一的,但值則不必。值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。d 通過鍵訪問值 print d michael 修改字典 ...

python3匿名函式

當我們在傳入函式時,有些時候,不需要顯式地定義函式,直接傳入匿名函式更方便。在python中,對匿名函式提供了有限支援。還是以map 函式為例,計算f x x2時,除了定義乙個f x 的函式外,還可以直接傳入匿名函式 list map lambda x x x,1,2,3,4,5,6,7,8,9 1...

Python3學習筆記

最近在起步學python,聚合一下這個過程中蒐集的資源和對一些基本知識做個小總結,語法基於python3,方便以後查詢。python官方文件 不錯的基礎課程 基本語法 演算法 建模 練習 以下是整理常用可能遺忘的基礎點 python3中的輸入是input 獲得使用者輸入的字串 a input ple...