Python中的Closure
#定義:如果在一個內(nèi)部函數(shù)里,對在外部作用域(但不是在全局作用域)的變量進(jìn)行引用,那么內(nèi)部函數(shù)就被認(rèn)為是閉包(closure)
分解來說,包含下面3個條件:
1) 需要函數(shù)嵌套, 就是一個函數(shù)里面再寫一個函數(shù).
2) 外部函數(shù)需要返回一個內(nèi)部函數(shù)的引
3) 外部函數(shù)中有一些局部變量, 并且, 這些局部變量在內(nèi)部函數(shù)中有使用
一些概念:
1)自由變量: 外部函數(shù)中定義的局部變量, 并且在內(nèi)部函數(shù)中被使用
2) 閉包: 那個使用了自由變量并被返回的內(nèi)部函數(shù)就稱為閉包
#支持閉包的語言有這樣的特性:
1)函數(shù)是一階值(First-class value),即函數(shù)可以作為另一個函數(shù)的返回值或參數(shù),還可以作為一個變量的值
2)函數(shù)可以嵌套定義,即在一個函數(shù)內(nèi)部可以定義另一個函數(shù)
#代碼示例
1
def counter(start_at=0):
2
count = [start_at]
3
def incr():
4
count[0] += 1 #對局部變量的引用
5
return count[0]
6
return incr #返回一個函數(shù)對象
7
8
9
if __name__ == '__main__':
10
c = counter(3)
11
print type(c)
12
print c()
13
print c()
14

2

3

4

5

6

7

8

9

10

11

12

13

14

posted on 2011-06-15 07:31 XXXXXX 閱讀(1310) 評論(0) 編輯 收藏 所屬分類: Python