一、函数式编程
特点:允许把函数本身作为参数传入另一个函数,还允许返回一个函数!Python对函数式编程提供部分支持。
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层
的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程
的程序设计。函数就是面向过程的程序设计的基本单元。
而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可
以归结到面向过程的程序设计,但其思想更接近数学计算。
我们首先要搞明白计算机(Computer)和计算(Compute)的概念。
在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转
指令,所以,汇编语言是最贴近计算机的语言。
而计算则指数学意义上的计算,越是抽象的计算,离计算机硬件越远。
对应到编程语言,就是越低级的语言,越贴近计算机,抽象程度低,执行效率高,
比如C语言;越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语
言。
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数
没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函
数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量
状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返
回一个函数!
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是
纯函数式编程语言。
二、内置高阶函数
1、高阶函数
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象
的编程范式。
2、map()
map() 会根据提供的函数对指定序列做映射。
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
#对于序列每个元素求绝对值
nums =list(range(-5,5))
print(nums)
result=list(map(abs,nums))
print(result)
##接受用户输入的3个数字;依次将接受的三个数转化为整形
num =input().split()
nums1= list(map(int,num))
print(nums1)
3、reduce()
reduce() 函数会对参数序列中元素进行累积。
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个结果。
## py2直接可以使用reduce, py3需要从functools包中导出
from functools import reduce
# 求两个数值和的匿名函数定义;
add = lambda x, y: x + y
# reduce的工作机制: result=add(add(add(1, 2), 3), 4)
result = reduce(add, [1, 2, 3, 4])
print(result)
# 求10的阶乘
result = reduce(lambda x, y:x*y, range(1, 10))
print(result)
4、filter()
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个序列。
#1、获取100以内能被3或5整除的数
nums=filter(lambda num: num%3==0 or num%5==0 , range(0,101))
print(list(nums))
#2、获取2000-2999年,所有的闰年
years=filter(lambda year: (year%4==0 and year%100!=0) or year %400==0 , range(2000,3000))
print(list(years))
#3、获取100以内所有素数
def is_permi(num):
if num <= 1:
return False
else:
for i in range(2,num):
if num %i ==0:
return False
else:
return True
nums1=filter(is_permi,range(2,101))
print(list(nums1))
print(is_permi(3))
print(is_permi(5))
5、sorted() & max/min
sorted() 函数对所有可迭代的对象进行排序操作。返回重新排序的列表。
sorted(iterable, key=None, reverse=False)
key: 主要是用来进行比较的元素,只有一个参数,
reverse: 排序规则,True 降序 ,False 升序(默认)。
goods=[
['tv',123,4000],
['iphone',300,3000],
['computer',100,6000]
]
top_Price =max (goods,key=lambda x:x[2])
print('TopPrice:',top_Price)
low_Price = min(goods,key=lambda x:x[2])
print('LowPrice:',low_Price)
6、python排序sort()和sorted()的区别是什么?
- 排序对象不同: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
- 返回值不同:
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,
内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。