python lambda表达式使用

简介

lambda表达式,又称匿名函数,主要的作用是为了节省结构体的复杂书写,同时可以省略掉函数名字,最主要可以和一些python中一些函数配合使用,来让代码更加简洁。但只能写一行表达式。

简单使用

g = lambda x,y:2*x+y
print(g(1,2))

形式为lambda 参数:表达式,然后使用的时候直接类似于函数一样调用就可以,不过比函数的效率高。

将lambda表达式作为返回值

类似于函数指针一样,lambda表达式可以在函数中作为返回值直接返回,见下面代码。

def get_square():
    #返回lambda表达式
    return lambda n:n*n

g = get_square()
print(g(2))

接下来介绍一种可以省略函数名让代码变简介的情况:

def get_math_func(type):
    # 定义三个局部函数
    def square(n):
        return n*n
    def cube(n):
        return n*n*n
    def factorial(n):
        return (1+n)*n/2
    # 返回局部函数
    if type == "square":
        return square
    if type == "cube":
        return cube
    else:
        return factorial

# 调用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

显然在上面代码中,square、cube、factorial三个局部函数可以用lambda表达式来替换,这样就不需要对函数进行起名,代码也会变得更加整洁,见下图。

def get_math_func(type):
    if type == "square":
        return lambda n:n*n
    if 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

与其它函数配套使用

主要与一些内置函数配套使用,如filter,map,reduce。

filter函数

语法为:filter(function, iterable),其中iterable可以为列表字符串或元组,逐一对元素通过function的条件进行筛选,然后保留下满足条件的数据。python3返回的是一个迭代器,可以用list进行转换得到输出结果。

nums = [1, 2, 3, 4, 5]
new_nums = filter(lambda n: n > 2, nums)
print(list(new_nums))

输出:
    [3, 4, 5]

map函数

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map() 函数语法:

map(function, iterable, ...)

其中function是映射函数,iterable可以有一个或多个,见下面样例。

nums = [1, 2, 3, 4, 5]
new_nums = map(lambda n: n ** 2, nums)
print(list(new_nums))
输出:
	[1, 4, 9, 16, 25]

nums = [1, 2, 3, 4, 5]
nums_2 = [2, 3, 4, 5, 6]
new_nums = map(lambda x, y: x + y, nums, nums_2)
print(list(new_nums))
输出:
	[3, 5, 7, 9, 11]

reduce函数

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

reduce() 函数语法:

reduce(function, iterable)
from functools import reduce

nums = [1, 2, 3, 4, 5]
new_nums = reduce(lambda x, y: x + y, nums)
print(new_nums)

输出:
    15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值