def rst(): r=[] for z in range(1,4): def lp(): return z*z r.append(lp) return r
>>> s1,s2,s3 = rst()
>>> print(s1(),s2(),s3())
9 9 9
>>> s1
<function rst.<locals>.lp at 0x000000000207C1E0>
>>> s2
<function rst.<locals>.lp at 0x0000000002F8F8C8>
>>> s3
<function rst.<locals>.lp at 0x0000000002F8F950>
#rst()返回列表r,s1为列表中lp()函数的地址
#s1()即表示为调用lp()函数,lp()函数使用了循环变量,最终z的值为3,所以返回9
#返回函数不要引用任何循环变量,或者后续会发生变化的变量。即包在里面的函数(lp()),不要引用外部函数(rst())的任何循环变量
函数赋值给变量的形式:
1. a=f 或 2. a=f()
第一种:a=f型属于将变量指向函数
>>> f = abs
>>> f(-10)
10 #相当于用f替换abs;即f指向abs函数本身
第二种:a=f()型属于将f()的返回值赋值给a的过程
def maker(N): def action(X): return X**N return action
f=maker(2)
此时是将maker(2)的返回值赋予f,即f指向了action()