1. 匿名函數
在python中普通函數定義是通過def
關鍵字進行定義,然後再def中定義代碼塊,那麼什麼叫匿名函數呢?匿名函數顧名思義,沒有函數名,而函數體也不是複雜的代碼塊,而是表達式。
2. lambda使用
2.1 基礎應用
lambda [arg1, arg2]: expression
基礎應用,匿名函數作用,需要傳入arg1和arg2兩個參數,調用函數後,執行的表達式求和。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
sum = lambda arg1, arg2: arg1 + arg2
print "Value of sum: ", sum(10, 20)
print "Value of sum: ", sum(30, 40)
輸出
Value of sum: 30
Value of sum: 70
2.2 lambda結合函數
lambda結合標準函數,一樣是存在作用域規則,lambda定義的表達式中,也是一個作用域的,其他的作用域是不可以進行訪問的,lambda和函數一樣,可以共享訪問全局變量,但是不可以訪問彼此的局部變量。lambda可以訪問的變量,1. 全局變量;2. 共享函數體內的變量,但是對於表達式用lamdba自定義的變量,是不共享函數體變量的
實例
#!/usr/bin/env python
# -*- coding:utf-8 -*-
x = 10
def foo():
y = 5
bar = lambda y=y: x + y
print bar()
y = 8
print bar()
foo()
變成結果
15
15
這個輸出結果是錯誤的,如果按照共享說法來講,應該是15和18,那爲什麼還是15呢?因爲在lambda函數中對於y進行了定義,第一次將y=5傳入lambda,lambda中y=y=5,這個時候lambda函數中存在一個變量就是y=5,而不是y=y,這個時候不會根據函數體中y=8而改變。
修改後的寫法
#!/usr/bin/env python
# -*- coding:utf-8 -*-
x = 10
def foo():
y = 5
bar = lambda : x + y
print bar()
y = 8
print bar()
foo()
實例輸出結果
15
18