關鍵字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...