'''
匿名函数:
定义一个匿名函数:
lambda 形参列表 : 函数处理逻辑(返回值)
匿名函数通常与其他函数结合使用
当需要返回多个返回值时,需要将所有返回值组成元组,列表或者字符串的形式返回
'''
'''
def calc(x):
return x+1
如上所示定义了一个简单的传入参数值加一的函数,
我们可以通过匿名函数一句来实现这个函数
等效于:
lambda x : x+1
'''
# lambda x,y:(x+1,y+1)
# s=lambda x,y:'x+1,y+1'# x+1,y+1
# print(s(2,5))
#
'''
需求:将所有数据中不符合要求的项去除,留下符合要求的选项
一、垃圾版
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# result_l=[]
# for filtrate in filtrate_l:
# if filtrate.endswith('v'):
# result_l.append(filtrate)
# print (result_l)
'''
二、高级版
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# def map_test(arge):
# result_l=[]
# for filtrate in arge:
# if filtrate.endswith('v'):
# result_l.append(filtrate)
# return result_l
# print(map_test(filtrate_l))
'''
三、进阶版
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# def fun_do(arge):
# return arge.endswith('v')
#
# def map_test(func,arge):
# result_l=[]
# for filtrate in arge:
# if func(filtrate):
# result_l.append(filtrate)
# return result_l
# print(map_test(fun_do,filtrate_l))
'''
四、终极版:将匿名函数作为参数传入函数
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# def map_test(func,arge):
# result_l=[]
# for filtrate in arge:
# if func(filtrate):
# result_l.append(filtrate)
# return result_l
#
# print(map_test(lambda a:a.endswith('v'),filtrate_l))
'''
我们写的完成上面需求的函数,在python内部已经帮我们定义了这样一个函数
即filter()函数,filter函数是将一个可迭代对象以给定的方式筛选出我们
想要的值,有所不同的是filter的结果为一个迭代器
'''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# print(list(filter(lambda a:a.endswith('v'),filtrate_l)))
# '''
# map函数:将传入的可迭代对象每个元素一给定的方式进行处理
# def map (fanc,arge):
# result=[]
# for a in arge:
# resule.append(func(a))
# return result
#
# '''
# filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
# print(list(map(lambda a:a+' like',filtrate_l)))
'''
reduce 函数:将传入的可迭代对象以指定方式将所有元素合并为一个元素
可传入初始值,默认为空
def reduce_test (func,arge,init=None):
if init==None:
i=arge.pop(0)
else:
i=init
for a in arge:
i=func(i,a)
return i
'''
from functools import reduce
filtrate_l=['miku_v','rin_v','ran_v','ruka_v','misaka_a','yuu_a']
print(reduce(lambda a,b:a+" "+b,filtrate_l))