内容正文:
模块四
Python函数式编程和模块
4.1 高 阶 函 数
4.2 返 回 函 数
4.3 匿 名 函 数
4.4 装饰器
4.5 偏函数
4.6 使 用 模 块
4.7 实训:实现第三方模块的安装
什么是Python?
如何搭建Python的简单开发环境?
了解Python的基本语法。
什么是Python函数式编程?
Python中常见的高阶函数有哪些?
Python中装饰器的用法及作用。
Python的常用内建模块有哪些?
函数是Python内建支持的一种封装,把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
而函数式编程(注意多一个“式”字,即functional programming)虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。函数式编程就是一种抽象程度很高的编程范式,用纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的。
函数式编程的一个特点就是允许把函数本身作为参数传入另一个函数,还允许返回一个函数。Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯粹的函数式编程语言。
学习要点
01
高 阶 函 数
4.1高 阶 函 数
高阶函数(higherorder function)有两个特点:变量可以指向函数;函数名其实就是指向函数的变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称为高阶函数。编写高阶函数,就是让函数的参数能够接收其他函数。
5
4.1高 阶 函 数
map函数接收两个参数:一个是函数,另一个是iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的iterator返回,也就是说map函数会根据提供的函数对指定序列做映射。
map函数语法格式如下。
map(func,seq1[,seq2,…])
第一个参数func接收一个函数名,后面的参数接收一个或多个可迭代的序列,返回的是一个集合。
Python函数编程中的map()函数是将func作用于给定序列seq中的每一个元素,如图4-1所示,并将所有调用的结果作为一个list返回。如果func为None,则返回一个列表,该列表中含有每个序列中元素的集合。
4.1.1map函数
6
4.1高 阶 函 数
图4-1 map函数作用解析图
4.1.1map函数
7
4.1高 阶 函 数
例如,现有一个平方函数f(x)=x2,要把这个函数作用在一个list[1,2,3,4,5,6,7,8,9]上的每一个元素,运用map函数实现就非常简单。
现在,我们用Python代码实现。
def f(x):
return x*x
r_map= map(f,[1,3,5,7,9]) #运用map函数,将f(x)作为参数
list(r_map)
执行结果如下。
[1,9,25,49,81]
map()传入的第一个参数是f,即函数对象本身。由于结果r_map是一个list,为iterator,而iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
4.1.1map函数
8
4.1高 阶 函 数
运用map()作为高阶函数,把运算规则抽象化,可以快速、简单地实现数学计算。另外,由于list包含的元素可以是任何类型,因此,map()不仅仅可以处理只包含数值的 list。例如,下面的例子中可以利用map()函数将用户输入的英文名字规范化(首字母大写,后续字母小写的规则)。
示例代码如下。
def format_name(sname):
#首字母变为大写,其余字母转换为小写
s_fname=sname[0:1].upper()+sname[1:].lower()
return s_fname
#运用map函数,format_name为参数,只用一行代码
r_mapname= map(format_name,['adam','LILY','sTeveN'])
list(r_mapname)
执行结果如下。
['Adam','Lily','Steven']
4.1.1map函数
9
4.1高 阶 函 数