在 Python 中,一切皆對象。函數也是對象,它可以賦值給其他變量,也可以當作參數傳遞。
lambda 表達式可以創建函數對象,在 Python 中,lambda 表達式的函數體只能有唯一的一條語句,也就是返回值表達式語句。
cube = lambda x : x ** 3PRint type(cube) # <type 'function'>print cube(5)
以函數對象作為參數的內置函數:map、filter、reduce。
map 函數接收一個函數對象,依次作用于列表中的每個元素,并將返回結果置于新的列表:
>>> map(lambda x: x ** 2, xrange(5))[0, 1, 4, 9, 16]
filter 函數接收一個函數對象,依次作用于列表中的每個元素,并將返回結果為 True 的元素置于新的列表:
>>> filter(lambda s : len(s) > 3, 'Beautiful is better than ugly'.split(' '))['Beautiful', 'better', 'than', 'ugly']
reduce 函數接收一個函數對象,這個函數須接收兩個參數。函數先作用于列表的前兩個元素,并將結果與下一個元素作為下一次調用的參數,累進地作用與整個列表:
>>> reduce(lambda a,b: a*b, [1, 2, 3, 4, 5]) # ((((1*2)*3)*4)*5)120
在 Python 中,簡單地說,如果在一個內部函數里,對在外部函數定義的局部變量進行引用,那么內部函數就被認為是閉包,而被內部函數所引用的局部變量則稱為自由變量。
def fall(v0): g = 9.8 return lambda t: v0 * t + 0.5 * g * t ** 2freefall = fall(v0 = 0)print freefall(5)
內部函數的 __closure__ 屬性保存了自由變量的取值:
print freefall.__closure__[0].cell_contents # 9.8
新聞熱點
疑難解答