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