函数式编程

1、匿名函数用法

匿名函数:定义函数的时候,不需要定义它的函数名

#这个是普通函数,不是匿名函数
def add(x,y):
    s = x + y
    print(s)
add(1,2)

'''

#匿名函数的格式
lambda parameter_list:expression
parameter_list:参数的参数
expression:只能是表达式,不能是代码块
注:lambdax,y:a = x+y这个写法是错误的,因为“a=x+y”只能是表达式,不能是代码块

'''
f = lambda x,y: x+y
print("匿名函数",f(1,2))

2、三元表达式

其他语言写法:x > y?x : y
python写法:条件为真时返回的结果 if 判断语句 else 条件为假时的结果

#python三元表达式的写法的例子
x = 2
y = 1
f = x if x > y else y
print(f)

**匿名函数与三元表达式连用**

#注:x if x > y else y这个是一个表达式
f = lambda x,y: x if x > y else y
print('max=',f(1,2))

3、map用法

map是一个类
map(func,*iterables)参数的解释
func:传的是一个函数名,可以是python内置的,也可以是自定义的。
*iterables:传的是一个可以迭代的对象,例如列表,元组,字符串这样的。

#求每个数的平方,用的是for循环
list_x = [1,2,3,4,5,6,7,8,9]
list_y = []
def square(x):
    return x * x
for v in list_x:
    f = square(v)
    list_y.append(f)
print(list_y)

> 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]

#求每个数的平方,用map
list_x = [1,2,3,4,5,6,7,8,9]
f = map(lambda x:x * x,list_x)
# 打印的是map对象
print(f)
#打印的是结果
print(list(f))

> 结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]

**map与lambda**
#传入多个参数的用法
list_x = [1,2,3,4,5,6,7,8,9]
list_y = [1,2,3,4,5,6]
f = map(lambda x,y: x * x + y,list_x,list_y)
print(f)
print(list(f))

3、reduce用法

reduce参数说明:
def reduce(function, sequence, initial)
functiom:传入的函数名
sequence:传入的是序列
initial:初始值

#举一例子
from functools import reduce
list_x = [1,2,3,4,5,6,7,8]
# reduce函数连续计算,连续调用lambda
result = reduce(lambda x,y:x+y,list_x)
print(result)#36
'''
在这里解释一下,什么不给y赋值,y的是哪里来的?
    在reduce()函数第一次调用lambda匿名函数时,将list_x中的1和2分别赋值给x和y;
    在reduce()函数第二次调用lambda匿名函数时,将list_x中的3赋值给了x,而将第一次运行的x+y的结果赋值了此时的y;
    在reduce()函数第三次调用lambda匿名函数时,将list_x中的4赋值给了x,而将第二次运行的x+y的结果赋值了此时的y;
    ............................................直到循环完list_x列表中的值
# (((((((1+2)+3)+4)+5)+6)+7)+8
'''
#例二
list_y = ['1','2','3','4','5','6','7','8']
r1 = reduce(lambda x,y:x+y,list_y,"aaaa")
print(r1) #aaaa12345678
'''
如果reduce()函数设置初始值,那么reduce()调用步骤?
    在reduce()函数在第一次调用lambda函数时,将list_y中的‘1’赋值给x,而将初始值“aaaa”赋值给y;
    在reduce()函数在第二次调用lambda函数时,将list_y中的‘2’赋值给x,而将第一次x+y的值赋值给此时y;
    ....................................................直到循环list_x为止。
    (((((((('aaaa'+'1')+'2')+'3')+'4')+'5')+'6')+'7')+'8')
'''

4、filter用法

filter 过滤

list_x = [1,0,0,1,0,0,1,1]
list_y = ['a','B','c','F','e','Z']
# 去除0数字,保留1
r = filter(lambda x:True if x==1 else False,list_x)
# 去除小写字母,保留大写字母
r1 = filter(lambda y:True if ord(y)<97 else False,list_y)
print(list(r))
print(list(r1))

结果
[1, 1, 1, 1]
[‘B’, ‘F’, ‘Z’]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值