Skip to content

Commit 92c00a6

Browse files
committed
add closure.py to demo closure in python
1 parent 4300c06 commit 92c00a6

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

py2014/closure.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/usr/bin/env python
2+
3+
4+
def closure1():
5+
flist = []
6+
7+
for i in xrange(3):
8+
def func(x):
9+
return x * i
10+
flist.append(func)
11+
12+
for f in flist:
13+
print f(2)
14+
15+
16+
def closure2(msg):
17+
def printer():
18+
print msg
19+
return printer
20+
21+
22+
def not_closure2(msg):
23+
def printer(msg=msg):
24+
print msg
25+
return printer
26+
27+
28+
def generate_power_func(n):
29+
def nth_power(x):
30+
return x ** n
31+
return nth_power
32+
33+
34+
def outer():
35+
d = {'y': 0}
36+
37+
def inner():
38+
d['y'] += 1
39+
return d['y']
40+
return inner
41+
42+
43+
def foo():
44+
a = [1, ]
45+
46+
def bar():
47+
a[0] = a[0] + 1
48+
return a[0]
49+
return bar
50+
51+
52+
if __name__ == '__main__':
53+
closure1()
54+
printer = closure2('Foo!')
55+
printer()
56+
printer = not_closure2('Foo!')
57+
printer()
58+
raised_to_4 = generate_power_func(4)
59+
del generate_power_func
60+
print raised_to_4(2)
61+
outer = outer()
62+
print outer()
63+
foo = foo()
64+
print foo()

0 commit comments

Comments
 (0)