Python学习(十六)--lambda表达式、map和reduce

1.lambda表达式

python把lambda称作匿名函数,C#则直接称作lambda表达式(lambda表达式的叫法更合适,因为:后边只能是一个表达式,不能放代码块,不能赋值,写for循环,if判断等等)

def add1(x,y):
    return x+y

add2 = lambda x,y: x+y

print(add1(1,2))

print(add2(1,2))
==>
3
3

2.三元表达式

其他语言:
x > y ? x : y
python:
x if x > y else y

x = 2
y = 1
r = x if x > y else y
print(r)
==>
2

3.map

(1)描述
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
(2)map() 函数语法:

map(function, iterable, ...)

(3)参数
function -- 函数
iterable -- 一个或多个序列

需求:列表list_x = [1,2,3,4,5,6,7,8],求列表每个元素的平方组成新的列表

(1)方式1:

list_x = [1,2,3,4,5,6,7,8]
def square(x):
    return x*x

r = []
for x in list_x:
    r.append(square(x))
print(r)
==>
[1, 4, 9, 16, 25, 36, 49, 64]

(2)方式2:

list_x = [1,2,3,4,5,6,7,8]
def square(x):
    return x*x
# 使用map函数
r = map(square,list_x)
print(r)
print(list(r))
==>

[1, 4, 9, 16, 25, 36, 49, 64]

(3)方式3:

# map结合lambda表达式
list_x = [1,2,3,4,5,6,7,8]
r = map(lambda x: x*x , list_x)
print(list(r))
==>
[1, 4, 9, 16, 25, 36, 49, 64]

labmda表达式如果有两个参数传入,则后边也需要跟两个列表;
lambda表达式只能使代码变简洁,无法提升性能

list_x = [1,2,3,4,5,6,7,8]
list_y = [1,2,3,4,5,6,7,8]
r1 = map(lambda x,y: x*x+y, list_x,list_y)
print(list(r1))
==>
[2, 6, 12, 20, 30, 42, 56, 72]

当两个参数列表的元素个数不一致时,能匹配上几个,就计算几个

list_x1 = [1,2,3,4,5]
list_y1 = [1,2,3,4,5,6,7,8]
r2 = map(lambda x,y: x*x+y, list_x1,list_y1)
print(list(r2))
==>
[2, 6, 12, 20, 30]

4.reduce

(1)reduce() 函数语法:

reduce(function, iterable[, initializer])

(2)参数
function -- 函数,有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数
(3)
reduce下,lambda表达式必须要有2个参数;
reduce在做一个连续的运算,连续调用lambda
初始情况下,reduce会取列表的前两个元素,即1+2=3,接下来,上一次计算结果做为一个参数和下一个元素做运算(((((((1+2)+3)+4)+5)+6)+7)+8)

from functools import reduce

list_x = [1,2,3,4,5,6,7,8]
r = reduce(lambda x,y: x+y,list_x)
print(r)
==>
36
# 初始情况下,reduce会取列表的前两个元素,即1+2=3,
# 接下来,上一次计算结果做为一个参数和下一个元素做运算(((((((1+2)+3)+4)+5)+6)+7)+8)

第三个参数[, initializer]的用法:

list_x2 = ['1','2','3','4','5','6','7','8']
r = reduce(lambda x,y: x+y,list_x2,'aaa')
print(r)
==>
aaa12345678

你可能感兴趣的:(Python学习(十六)--lambda表达式、map和reduce)