19_Python高级特性-内置高阶函数

一、函数式编程

特点:允许把函数本身作为参数传入另一个函数,还允许返回一个函数!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()的区别是什么?

  1. 排序对象不同: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
  2. 返回值不同:
    list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,
    内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值