Python中lambda的用法
lambda表达式定义的函数为匿名函数,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用。本文对Python中lambda表达式的特性和用法进行了一个简单的总结。
语法
基本语法格式:
lambda [参数列表]: 表达式
语义与如下函数形式相同:
def fn(参数列表): return 表达式
语法格式要点:
- 由 lambda 关键词定义
- 冒号左边是参数,后边是返回值
- 只能是单行函数体
举例:
lambda x, y: x + y
def add(x, y): return x + y
特性
- 匿名函数。 没有名字的函数。
- 有输入输出。 以冒号为界,左边获取参数,右边返回计算值。
- 单行函数,功能简单。 由于函数体只能写在单行内,只能完成简单功能,代码简洁。
- 用完立即释放。 用于无需多次复用的函数,使用后立即释放,提升性能。
用法
-
将lambda函数赋值给变量,由该变量间接调用该lambda函数。
add = lambda x, y: x + y print(add(1, 2)) # 输出3
-
将lambda函数赋值给其他函数,从而将其他函数替换为该lambda函数。
time.sleep=lambda x:None #屏蔽了sleep函数的功能 time.sleep(3) #执行该语句时,程序不会休眠3秒钟
-
将lambda函数作为其他函数的返回值,即作为内部函数。 (这里涉及“闭包”)
def get_math_func(type): # 返回lambda表达式 if type == 'square': return lambda n: n * n elif type =- 'cube': return lambda n: n * n * n else: return lambda n: (1 + n) * n / 2 # 调用get_math_func(), 返回一个嵌套函数 math_func = get_math_func("cube") print(math_func(5)) # 输出125 math_func = get_math_func("square") print(math_func(5)) # 输出25 math_func = get_math_func("other") print(math_func(5)) # 输出15.0
-
将lambda函数作为参数传递给其他函数。
# 一些典型的内置函数 # map函数 x = map(lambda x: x * x, range(8)) # 对元素做平方计算 print([e for e in x]) # 输出 [0,1,4,9,16,25,36,49] y = map(lambda x: x * x if x % 2 == 0 else 0, range(8)) print([e for e in y]) # 输出 [0,0,4,0,16,0,36,0] # sorted函数 s = sorted(range(1,10), key=lambda x: abs(5-x)) # 按照元素与5距离从小到大进行排序 print([e for e in s]) # 输出 [5, 4, 6, 3, 7, 2, 8, 1, 9] # filter函数 f = filter(lambda x: x % 3 == 0, range(1,3)) # 过滤能够被3整除的元素 print([e for e in f]) # 输出 [3] # reduce函数 r = reduce(lambda a, b: '{}, {}'.format(a, b), range(1,10)) #将元素从左往右两两以逗号分隔的字符的形式依次结合起来 print([e for e in r]) # 输出 '1, 2, 3, 4, 5, 6, 7, 8, 9'
写在最后的话
Explicit is better than implicit.(明了胜于晦涩。) – 《Python之禅》
参考文献
-
《疯狂Python讲义》