您的位置:首页 > 编程语言 > Python开发

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

2016-12-28 22:06 387 查看

返回函数

返回函数顾名思义:就是返回值是函数.

内部函数可以引用外部函数的参数和局部变量.

def lazy_sum(*args):
def sum():
all = 0
for x in args:
all = all + x
return all
return 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 fs

f1, 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 g
for i in range(1, 4):
print(i)
fs.append(f(i))
return fs

f1, f2, f3 = count()


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

匿名函数

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

举个例子:

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


关键字
lambda
表示匿名函数,冒号前面的x表示函数参数。


匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐