(六)Python函数式编程2:匿名函数 lambda

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24459491/article/details/84502317

2-lambda-function.py


# 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

猜你喜欢

转载自blog.csdn.net/qq_24459491/article/details/84502317
今日推荐