python学习笔记(5)_返回函数

返回函数

python中可以把函数作为返回值;
例如:

def autoincr(x):
    def incr():
        i = 1
        while i < x:
            yield i
            i = i + 1
    g = incr()
    def retu():
        return next(g)
    return retu

在函数autoincr中我们又定义了2个函数incrretu,内部函数incr可以应用外部函数autoincr的参数和局部变量, 当autoincr返回retu时,相关参数和变量都保存在返回函数(incr)中,这种程序结构称为“闭包(Closure)”.
返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
例如:

def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

打印f1~f3的值时,会发现都为9; 为什么呢?
因为函数里面返回引用了i,但是函数返回fs并非立即执行f函数里面的return i*i而是等待三个函数都return时,才执行return i*i但是,这时候i的值已经为3了.

匿名函数

lambda n: n % 2 == 1
关键字lambda表示匿名函数,冒号前面的n表示函数参数。
python 对匿名函数的支持有限, 只有一些简单情况可以使用匿名函数;

Larwas
请先登录后发表评论
  • latest comments
  • 总共0条评论