ITS·黑客

Python学习笔记(八)返回函数

2017-04-12  本文已影响0人  木凛

1)函数作为返回值,调用函数f时,才真正计算求和的结果:f()

2)请再注意一点,当我们调用lazy_sum()时,每次调用都会返回一个新的函数,即使传入相同的参数:

>>> f1 = lazy_sum(1, 3, 5, 7, 9)

>>> f2 = lazy_sum(1, 3, 5, 7, 9)

>>> f1==f2

False

f1()和f2()的调用结果互不影响。

3)返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。——解决方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变

举例


def count():

    fs = []

    for i in range(1, 4):

        def f():

            return i*i

        fs.append(f)  #注意到这里f是作为一个函数加入的

    return fs

f1, f2, f3 = count()


>>> f1()

9

>>> f2()

9

>>> f3()

9

后:将变量和函数绑定

def count():

    def f(j):

        def g():

            return j*j

        return g

     fs = []

     for i in range(1, 4):

        fs.append(f(i))      # f(i)立刻被执行,因此i的当前值被传入f()

     return fs

fs.append(f(i))传入的f(i)会首先被进行函数计算,然后f(i)的返回值,也就是函数g作为fs.append()的参数传入,所以最终传入的参数是函数g,仍是一个函数。最终fs.append()接收到的参数是f(i)的返回值


>>> f1, f2, f3 = count()

>>> f1()

1

>>> f2()

4

>>> f3()

9

上一篇下一篇

猜你喜欢

热点阅读