j 的值是如何获得的?
def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r = f(i)
fs.append(r)
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
如上,并为对j赋值,我想知道j的值是如何获得的;还有f1, f2, f3 = count() 这个要怎么理解呢?
def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r = f(i)
fs.append(r)
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
如上,并为对j赋值,我想知道j的值是如何获得的;还有f1, f2, f3 = count() 这个要怎么理解呢?
2015-12-31
分别解答你的两个问.
并未对j赋值, j的值是如何获得的?
考察函数定义:
def count(): fs = [] for i in range(1, 4): def f(j): # j只是函数定义时使用的形参, 这里换成任意名字都是可以的, # 仅指代了f()这个函数需要一个入参 def g(): return j*j return g r = f(i) # f()的实际调用位置, 将for循环中的i, 赋值进来了; r获得了返回值:即g()函数, 即形式定义: j*j, 在这里把j替换为调用时传进来的参数i, 即 i * i fs.append(r) return fs
上面就是j赋值问题的解析.
另外一问, f1, f2, f3 = count() 调用方式的理解?
首先, 考察count()的返回值: fs列表
fs列表存储的是什么的? [f(1), f(2), f(3)] 三个函数
然后, 再考察赋值语句: f1, f2, f3 = count()就比较好理解了,变形:
f1, f2, f3 = [f(1), f(2), f(3)], 这里就是序列赋值语句的方式, "=" 两侧按照次序分别赋值.
其实更准确点来讲, '=' 左边是(f1, f2, f3)元组.
你可以在交互模式下动手验证一下:
a, b, c = 1, 2, 3 #然后分别看看a, b, c的值, 看是不是按照次序分别赋值的.
举报