image.png

  1. def f(x):
  2. glist=[]
  3. for i in range(x):
  4. def g(y):
  5. return y+i
  6. glist.append(g)
  7. return glist
  8. for g in f(3):
  9. print(g(1))
  10. # 3 3 3
  11. # for 没有作用域 ,g 共用同一个i

固定参数

  1. def f(x):
  2. glist=[]
  3. for i in range(x):
  4. def g(y,i=i):
  5. return y+i
  6. glist.append(g)
  7. return glist
  8. for g in f(3):
  9. print(g(1))
  10. # 1 2 3

新的作用域

  1. def f(x):
  2. glist=[]
  3. for i in range(x):
  4. def h(i):
  5. return lambda y:y+i
  6. glist.append(h(i))
  7. return glist
  8. # 1 2 3