Python-函数式编程

概述

  函数式编程并非函数编程那么简单,而是将计算机的运算视为数学上的运算,比起面向过程,函数式编程更注重的是执行结果而非执行的过程。python并非一门函数式编程语言,但仍有很多函数式编程的特性,如lambda、map、reduce、filter

lambda

语法格式:

# 有名的函数
def func(x,y):    
    return x+y # 返回两数之和

# 匿名函数,参数不需要加括号,返回不需要return,默认带了return
# 第一种写法
res = lambda x,y:x+y # res即指向该匿名函数的内存地址
print(res(1,2)) # 加括号调用,并传入参数

# 第二种写法
res = (lambda x,y:x+y)(1,2) # 直接传入参数
print(res)

取薪资最高的名字

传统方式

def func(k):
    return salaries[k]


salaries = {
    'wx': 1000,
    'bob': 2000,
    'marry': 3000
}

res = max(salaries, key=func)
print(res)

# max的工作流程
'''
  max迭代传入的salaries,得到一个个的k,也就是名字,然后将名字传给key,即key=func(k),拿到value
  key=func不需要收到传参,会自动从前面的迭代的salaries传入
  首先迭代wx,将名字传给func,得到薪资,再迭代bob,将k传给func,得到薪资。。。
  然后进行比较,得到最大值
  min也是类似的
'''

使用lambda


salaries = {
    'wx': 1000,
    'bob': 2000,
    'marry': 3000
}
res = max(salaries, key=lambda k: salaries[k])
# res = max(salaries, key=func)
# 对比着看,lambda那部分就是key=func,不过传统方式,函数单独写了
print(res)

sorted

排序

salaries = {
    'wx': 1000,
    'bob': 2000,
    'marry': 3000
}
res = sorted(salaries, key=lambda k: salaries[k])
'''
  通过lambda,将salaries传过来的k的值取出来,然后给sorted排序,然后输入排序后的结果
''' print(res)

map

映射

通过列表生成式

lst = ['hushow', 'bob', 'marry']
res = [name + '_dsb' for name in lst] # 得到的结果是一个列表生成式对象
for i in res: # 循环取值
    print(i)

通过map+lambda

# map+lambda实现
lst = ['hushow', 'bob', 'marry']
res = map(lambda name: name + '_dsb', lst)
# 迭代列表l(相当于 for name in l),将迭代的值给name,传给lambda,然后返回
print(res.__next__())
for i in res:
    print(i)

filter

过滤

# 过滤以sb结尾的
# 以生成器生成式实现
l = ['hushow', 'bob_sb', 'marry_sb', 'lxx']
res = (name for name in l if name.endswith('sb'))
print(res.__next__())
print(res.__next__())

使用filter+lambda

# 以filter实现
l = ['hushow', 'bob_sb', 'marry_sb', 'lxx']
res = filter(lambda name: name.endswith('sb'), l)
# 相当于 res = filter(lambda name:(return) name.endswith('sb'),l),加了省略了return print(res.__next__()) print(res.__next__()) # 迭代列表l(相当于for name in l),每次将迭代的值传给name,判断是否以sb结尾,不需要if # 判断的结果两种,True和False,filter默认留下True的结果print(res.__next__())

reduce

from functools import reduce

res = reduce(lambda x, y: x + y, [1, 2, 3], 10)  # 指定初始值10
print(res)  # 16,累加

res = reduce(lambda x, y: x + y, ['a', 'v', 'b'], 'hello')
print(res)  # helloavb

 

END.

上一篇:SAP Fiori Elements - how is read only field implemented in UI


下一篇:[蓝桥杯][算法提高VIP]排队打水问题 Easy only once *贪心算法