1高階函式
1.1 變數可以指向函式,可以把乙個函式賦值給變數
如下**
>>> f = abs
>>> f(10)
10
1.2 變數可以指向函式,函式的形參也能夠接收函式,這就是高階函式
>>> def add(x, y, f):
... return f(x) + f(y)
...
>>> add(-5, -5, abs)
10
2 map
map()函式接收兩個引數,乙個是函式,乙個是序列,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的list返回。
例項**如下:
>>> def f(x):
... return x*x
...
>>> map(f, [1, 2, 3, 4])
[1, 4, 9, 16]
>>>
裝換為字元
>>> map(str, [1, 2, 3])
['1', '2', '3']
2.1 reduce
reduce把乙個函式作用在乙個序列[x1, x2, x3...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累加計算,reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
如下例項將12345序列裝換為12345數字
>>> def fn(x, y):
... return x * 10 + y
...
>>> reduce(fn, [1, 2, 3, 4, 5])
12345
3 filter
和map不同的是,filter呼叫的函式返回true才會保留,否則刪除。如下示例可以刪除乙個list中的空格
>>> def not_empty(s):
... return s and s.strip() //刪除s中的空格
...
>>> filter(not_empty, ['a', '', 'b', none, 'c', ''])
['a', 'b', 'c']
4 sorted 可以對序列進行排序,通常規定,對於兩個元素x和y,如果認為x < y,則返回-1,如果認為x == y,則返回0,如果認為x > y,則返回1。如下示例演示了從小到大的排序
>>> sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]
5 閉包
>>> def lazy_sum(*args):
... def sum():
... ax = 0
... for n in args:
... ax = ax + n
... return ax
... return sum
...
>>> f = lazy_sum(1, 3, 5, 7, 9)
>>> f
>>> f()
25
>>>
可以看到,呼叫lazy_sum 返回的是乙個sum函式,在此呼叫f()可以計算出求和結果
在這個例子中,我們在函式lazy_sum中又定義了函式sum,並且,內部函式sum可以引用外部函式lazy_sum的引數和區域性變數,當lazy_sum返回函式sum時,相關引數和變數都儲存在返回的函式f()中,這種稱為「閉包(closure)」的程式結構擁有極大的威力。每次呼叫閉包函式時,即使形參相同,返回的函式都是乙個不同的函式。
6 匿名函式
>>> map(lambda x: x * x, [1,2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]
關鍵字lambda表示匿名函式,冒號前面的x表示函式引數。
可以將乙個匿名函式賦值給變數:如下所示
>>> f = lambda x: x * x
>>> f(5)
25
7 裝飾器
每乙個函式物件都有乙個__name__屬性
如下示例:
>>> now.__name__
'now'
>>> f.__name__
'now'
現在,假設我們要增強now()函式的功能,比如,在函式呼叫前後自動列印日誌,但又不希望修改now()函式的定義,這種在**執行期間動態增加功能的方式,稱之為「裝飾器」(decorator)。
本質上,decorator就是乙個返回函式的高階函式。所以,我們要定義乙個能列印日誌的decorator,可以定義如下:
#!/usr/bin/env python
# -*- coding: utf8 -*-
def log(func):
print 'call %s():' % func.__name__
return func(*args, **kw)
@log
def now():
print 'hello world'
if __name__ == '__main__':
now()
通過@符號為now()函式內建乙個裝飾器,呼叫now()函式時會自動生成日誌
函式式程式語言python 函式式程式設計
函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...
Python函式式程式設計
python函式式程式設計的核心思想是 把函式當資料.所以,函式可以用作函式引數,函式返回值,元組或字典成員等 閉包閉包是實現 復用的一種途徑,與類不同的是它基於函式實現.函式與它的環境變數一起就構成了閉包,閉包只有乙個返回值,那就是閉包中的函式 def line conf a,b def line...
python函式式程式設計
一 lambda 主要用來自定義行內函式 二 map 首先定義乙個函式,再用map 命令將函式逐一應用到map列表中的每個元素,最後返回乙個陣列 例如 map lambda x,y x y,a,b 表明將a,b兩個列表的元素對應相乘,把結果返回到新列表。三 reduce 用於遞迴運算 例如 redu...