# 1. 函数作为返回值
def my_sum(*nums):# my_sum 返回一个求和函数sum
def sum():
s = 0
for num in nums:
s = s + num
return s
return sum
print(my_sum) # <function my_sum at 0x00000000003DC1E0>
f = my_sum(1, 3, 5, 7, 9)
print(f) # <function my_sum.<locals>.sum at 0x0000000001E77D90>
print(f()) # 25
# 练习:扩展上面的函数, 列表求和后加a
# 2. 闭包
# 这个例子中,每次循环,都创建了一个新的函数,然后,把创建的3个函数都返回了。
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
print(f1(), f2(), f3()) # 9 9 9
# 全部都是9!原因就在于返回的函数引用了变量i,但它并非立刻执行。
# 等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为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
f1, f2, f3 = count()
print(f1(), f2(), f3()) # 1 4 9
# 3. 匿名函数 lambda表达式
f = lambda x: x * x
print(f) # <function <lambda> at 0x00000000021B7F28>
print(f(5)) # 25
# 同样,也可以把匿名函数作为返回值返回,比如:
def func(x, y):
return lambda: x * x + y * y
print(func(1, 2)()) # 5
(六)Python函数式编程2:匿名函数 lambda
最新推荐文章于 2020-11-24 11:45:09 发布