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))
==>
<map object at 0x00000190424057B8>
[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