一、函数式编程
什么是函数式编程?
函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程好的特性,如lambda,map,reduce,filter
# 匿名函数
# 1、def用于定义有名函数
# func = 函数的内存地址
# def func(x,y):
# return x + y
# print(func) # <function func at 0x000001E2154D95E0>
# 2、lambda用于定义匿名函数 目的:精简.不要写return
# lambda x,y:x+y
# print(lambda x,y:x+y) # <function <lambda> at 0x000001E2154D9670>
# 3、调用匿名函数
# 方式一:内存地址(),匿名lambda造出来的就是一个内存地址。
# res = (lambda x,y:x+y)(1,2)
# print(res) # 3
# 方式二:匿名函数的就是没有名字,不要这样做了。
func = lambda x,y:x+y
res = func(1,2)
print(res)
# 匿名函数应用场景:匿名函数在定义出来后立刻调用,适用于临时调用一次,更多是是将匿名与其他函数配合使用。
# 匿名函数的应用
salaries = {
"siry":3000,
'tom':7000,
'lili':10000,
'jack':2000
}
# 需求1:找出薪资最高的那个人
# 使用max()函数取出最大值
# res = max([3,343,35,63,3,3,2,21])
# print(res) # 343
# 迭代出的内容 比较的值
# 'siry' 3000
# 'tom' 7000
# 'lili' 10000
# 'jack' 2000
# res = max(salaries)
# print(res) # 为啥是tom?比较的是名字首字母
# 使用key值比较
# def func(k):
# return salaries[k]
# res = max(salaries,key=func) # 返回值=func('siry')
# print(res) # lili
# 针对func设计成匿名函数
res = max(salaries,key=lambda k:salaries[k])
print(res)
# 排序:关键字sorted()的使用,
salaries = {
"siry":3000,
'tom':7000,
'lili':10000,
'jack':2000
}
res = sorted([1,2,3,42,14,1,41,4])
print(res) # [1, 1, 2, 3, 4, 14, 41, 42]
res1 = sorted(salaries)
print(res1) # ['jack', 'lili', 'siry', 'tom ']
res = sorted(salaries,key=lambda k:salaries[k])
print(res) # 按工资排序:['jack', 'siry', 'tom', 'lili']
# 排序:关键字sorted()的使用,
# salaries = {
# "siry":3000,
# 'tom':7000,
# 'lili':10000,
# 'jack':2000
# }
# res = sorted([1,2,3,42,14,1,41,4])
# print(res) # [1, 1, 2, 3, 4, 14, 41, 42]
#
# res1 = sorted(salaries)
# print(res1) # ['jack', 'lili', 'siry', 'tom']
# reverse有个默认值,可以改变排列顺序
# res = sorted(salaries,key=lambda k:salaries[k],reverse=True)
# print(res) # 按工资排序:['jack', 'siry', 'tom', 'lili']
# 映射:map()关键字的使用(了解)
# l = ['lsj','tiantian','tianjing','wenying']
# # 列表生成式
# new_l = (name + '_n' for name in l)
# print(new_l) # <generator object <genexpr> at 0x00000298321CF6D0>
#
# res= map(lambda name:name+'_n',l)
# print(res) # # 生成器:<map object at 0x00000298321C2130>
# 过滤器:filter的应用(了解)
# l = ['lsj_n','tiantian','tianjing_n','wenying']
# res = (name for name in l if name.endswith('n'))
# print(res) # <generator object <genexpr> at 0x000002279B26F660>
# res = filter(lambda name:name.endswith('n'),l)
# print(res) # 与上面的类似生成一个迭代器:<filter object at 0x000001FEC1C46B20>
# reduce()的应用,多用于合并操作(了解)
from functools import reduce
res = reduce(lambda x,y:x+y,[1,2,3],10) # 11 13 16
print(res) # 16
res = reduce(lambda x,y:x+y,['a','b','c']) # 11 13 16
print(res) # abc