Python3 基础:返回函数和匿名函数

来源:互联网 发布:大众网络报电子版 编辑:程序博客网 时间:2024/06/01 12:28

返回函数

返回函数顾名思义:就是返回值是函数.
内部函数可以引用外部函数的参数和局部变量.

def lazy_sum(*args):def sum():    all = 0    for x in args:        all = all + x    return allreturn sum print(lazy_sum(1,3,5,7))print(lazy_sum(1,3,5,7)())# 输出结果<function lazy_sum.<locals>.sum at 0x7f2f4d1b26a8>16

上面的函数:第一个输出结果是一个函数引用.第二个输出才是最终我们想要的结果.这就说明:返回函数返回的是指向sum函数的变量,当调用sum()的时候内部函数才真正的执行了.
还有一点需要注意的是:每次调用lazy_sum函数都会返回一个新的函数,即使传入的参数相同.

闭包

大家看这段代码:

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

你运行一下你会发现,输出的结果是1,2,3 内部函数在调用的时候才运行.那么当你调用f1(),f2(),f3()时输出的结果全部都是9.你肯定知道为啥了.因为调用了count(),i已经为3了,而内部的f()此时还没有执行,当它执行时i = 3,所以输出的都是9.
那么,应该怎么修改呢?看代码:

def count():fs = []def f(j):    def g():        return j*j    return gfor i in range(1, 4):    print(i)    fs.append(f(i))return fsf1, f2, f3 = count()

返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

匿名函数

当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
举个例子:

>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6]))[1, 4, 9, 16, 25, 36]

关键字lambda表示匿名函数,冒号前面的x表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

0 0
原创粉丝点击