43_closure.py 508 B

12345678910111213141516171819202122232425262728293031323334353637
  1. # only one level nested closure is implemented
  2. def f0(a, b):
  3. def f1():
  4. return a + b
  5. return f1
  6. a = f0(1, 2)
  7. b = f0(3, 4)
  8. assert a() == 3
  9. assert b() == 7
  10. def f0(a, b):
  11. def f1():
  12. a = 5 # use this first
  13. return a + b
  14. return f1
  15. a = f0(1, 2)
  16. assert a() == 7
  17. def f3(x, y):
  18. return lambda z: x + y + z
  19. a = f3(1, 2)
  20. assert a(3) == 6
  21. # closure ex
  22. def f(n):
  23. def g(x):
  24. if x==n:
  25. return n
  26. return g(x+1)
  27. return g(0)
  28. assert f(10) == 10