Python-函数闭包

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()

 

posted @ 2019-07-23 14:51  kang09  阅读(154)  评论(0编辑  收藏  举报