返回信息流def multipliers(n):
"返回n个函数f0,f1,f2,f3...,其中f0(x) == 0, f1(x) == x, f2(x)==x*2, f3(x)==x*3……"
funcs = []
for i in range(n):
def f(x):
return x * i
funcs.append(f)
return funcs
g0,g1,g2,g3 = multipliers(4)
print(g0(10)) # 30
print(g1(10)) # 30
print(g2(10)) # 30
print(g3(10)) # 30
为什么不是0,10,20,30呢?
这是一条镜像帖。来源:北邮人论坛 / python / #13406同步于 2016/4/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
惊喜不断14
nuanyangyang
2016/4/16镜像同步20 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
唔...暖大 忽略群这个问题...
因为python是后期绑定的.用到时候才找i.这时候i已经是3了.
除去上面同学的方法.保证每个子函数保存不同的i也能达到目标
def multipliers(n):
"""返回n个函数f0,f1,f2,f3...,其中f0(x) == 0, f1(x) == x, f2(x)==x*2, f3(x)==x*3……"""
funcs = []
for i in range(n):
def F(i):
def f(x):
return x * j
return f
funcs.append(F(i))
return funcs
g0, g1, g2, g3 = multipliers(4)
print(g0(10)) # 0
print(g1(10)) # 10
print(g2(10)) # 20
print(g3(10)) # 30
我猜那四个函数的i用的一定是同一个。
然后在for的第四次循环里面i已经变成3了。
之后对拿到的函数调用,也都是用最后的结果去乘,所以都是30。
然后4楼那个做法是对的F(i)会把结果算出来,def f(x)拿到的是常量,所以能够有0,10,20,30的结果。
对嘛暖神 0v0 ?