函数式编程
函数式编程主要思想是把运算过程尽量写成一系列嵌套的函数调用
“表达式”是一个单纯的运算过程,总是有返回值
“语句”是执行某种操作,没有返回值
函数式编程只使用表达式
匿名函数(lambda表达式)
1,无参的lambda表达式
def get():
return “1”
print(get())
func = lambda : “1”
print(func())
2,有参数的lambda表达式
def add(x,y):
return x+y
print(add(1,2))
#定义
func = lambda x,y:x+y
#调用
print(func(1,2))
3,lambda表达式可以使用可变参数
func = lambda *args:sum(args)
print(func(1,2,4))
func = lambda **kwargs :f"{kwargs}"
print(func(id = 1,city = “北京”)) {‘id’:1,“city”:“北京”}
4,有条件判断的lambda表达式(三目表达式)
func = lambda x:f"{x}是偶数" if x%2==0 else "不是
print(func(21))
高阶函数
概念:把函数当成参数传递的函数就是高阶函数
def printinfo(): #定义了一个函数
print(‘info…’)
#高阶函数
def renfunc(func): 定义了参数
func() #调用传入的函数
runfunc(printInfo) #函数仅作为参数值,仅是含糊名
1.map()
map() 函数语法:
map(function, iterable, …)
function – 函数
iterable – 可迭代对象
功能:把可迭代对象中的数据逐一拿出来,经过函数处理之后,将结果放到map中并返回一个迭代器对象。
字典键值对互换:
dic = {“北京”:“京”}
res ={}
for a,b in dic.items():
res[b] = a
print(res)
map+自定义函数
def change(item):
return (item[1],item[0]) #item[1]"值” item[0]“键”
res = map(change,dic.items()) #dic.items()键值对转换成元组的形式
print(dict(res))
res = map(lambda item:(item[1],item[0]),dic.items())
print(dict(res))
reduce函数
功能:给定序列,依次取出一个元素作为参数,与前一次函数结果进行函数运算,最后返回运算结果。
from functools import reduce
sorted函数
和sort函数不同,sort函数修改原列表,sorted排序后赋值给新列表,sorted函数中可以添加函数计算。
filter函数
语法:filter(func,iterable)
功能:过滤数据
如果函数的返回值是True,代表保留当前数据
如果函数的返回值是false,代表舍弃当前数据
闭包函数
概念:内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程叫做闭包,这个内函数叫做闭包函数。
本质:相对于面向对象的“封装”,闭包可以理解为是函数式编程中的“封装”。
def outer():
a=5
def inner():
print(a)
return inner
def test(a,b):
def test_in(c):
print(a+b+c)
return test_in
num = test(1,8)
num(5)
num1=test(2,3)
num1(3)
不用装饰器的闭包函数
def check(func):
def info():
print('函数执行之前')
func()
print('函数执行之后')
return info
def printinfo():
print('函数执行')
newfunc = check(printinfo)
newfunc() #函数执行之前 函数执行 函数执行之后
用装饰器
# 装饰器@
def check(func):
def info():
print('函数执行之前')
func()
print('函数执行之后')
return info
@check
def printinfo():
print('函数执行')
printinfo() #函数执行之前 函数执行 函数执行之后
装饰器可以嵌套,可以调用类