python-learning03 - 匿名函数lambda

1. 匿名函数

在python中普通函数定义是通过def关键字进行定义,然后再def中定义代码块,那么什么叫匿名函数呢?匿名函数顾名思义,没有函数名,而函数体也不是复杂的代码块,而是表达式。

2. lambda使用

2.1 基础应用

lambda [arg1, arg2]: expression

基础应用,匿名函数作用,需要传入arg1和arg2两个参数,调用函数后,执行的表达式求和。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

sum = lambda arg1, arg2: arg1 + arg2

print "Value of sum: ", sum(10, 20)
print "Value of sum: ", sum(30, 40)

输出

Value of sum: 30
Value of sum: 70

2.2 lambda结合函数

lambda结合标准函数,一样是存在作用域规则,lambda定义的表达式中,也是一个作用域的,其他的作用域是不可以进行访问的,lambda和函数一样,可以共享访问全局变量,但是不可以访问彼此的局部变量。lambda可以访问的变量,1. 全局变量;2. 共享函数体内的变量,但是对于表达式用lamdba自定义的变量,是不共享函数体变量的
实例

#!/usr/bin/env python
# -*- coding:utf-8 -*-

x = 10

def foo():
    y = 5
    bar = lambda y=y: x + y
    print bar()
    y = 8
    print bar()

foo()

变成结果

15
15

这个输出结果是错误的,如果按照共享说法来讲,应该是15和18,那为什么还是15呢?因为在lambda函数中对于y进行了定义,第一次将y=5传入lambda,lambda中y=y=5,这个时候lambda函数中存在一个变量就是y=5,而不是y=y,这个时候不会根据函数体中y=8而改变。

修改后的写法

#!/usr/bin/env python
# -*- coding:utf-8 -*-

x = 10

def foo():
    y = 5
    bar = lambda : x + y
    print bar()
    y = 8
    print bar()

foo()

实例输出结果

15
18

猜你喜欢

转载自blog.csdn.net/hao_zhang_shrek/article/details/101638042
今日推荐