高阶函数
- 变量可以指向函数:f=abs
- 函数名也是变量:
注意:由于abs函数实际上是定义在import builtins模块中的,所以如果需要修改abs变量的指向在其他模块也生效,需要使用:import builtins;builtins.abs=10
- 传入函数
一个函数可以接受另一个函数作为参数——高阶函数
def add(x,y,f):
return f(x)+f(y)
print(add(5,-6,abs))
变量可以指向函数
-
map函数:
map(函数f,iterable)
把一个函数f,作用在可迭代对象上
(注:map()的返回值已经不再是list,而是iterators,直接使用会报错<map object at 0x000001A8A5497048>
需要将iterator 转换成list , 比如list(map()
)
(注:若函数中已经定义过一个list,则使用list(map())时会报错TypeError: 'list' object is not callable
callable()是python的内置函数,用来检查对象是否可被调用,(可被调用指的是对象能否使用()括号的方法调用)将自定义的列表名字修改,不叫list就可以了) -
reduce函数:作用在一个序列上,把结果继续和序列的下一个元素做累积计算
reduce(函数fun,序列)
(注:使用rudece函数需要先导入:from functool import ruduce
)
(注:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)) -
lambda函数:(一个匿名函数)
lambda 参数:表达式
(注:参数:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数)
(注:表达式:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来) -
list.split(),split()函数通过指定分隔符对字符串进行切片,通常通常输入的字符串需要分割处理
-
.upper()将字母转换为大写,
-
.lower()将字母转换为小写
-
raw_print()==print(),python3中使用print()代替raw_print(),在Python3中使用raw_python会报错
name 'raw_input' is not defined
-
eval(expression[, globals[, locals]])
eval() 函数用来执行一个字符串表达式,并返回表达式的值
练习: -
利用map()函数,把输入的英文名,变成首字母大写其余小写
思路:
1、input()获取输入的str
2、str.split()切片,将输入的str用','
分开成list
3、map(fun,list)函数,将函数作用到list的每个元素上
4、list(map()) 将得到一个list
5、list[0]即取第一个元素,list[1:]即取第二个及之后的元素
-
接收一个list并利用reduce()求积
思路:
1、定义pord()函数接收list
2、定义fun3(x,y)函数,实现乘积
3、使用reduce()函数,将fun3函数作用在L上
(2、或者使用匿名函数:lambda 参数:表达式)
-
把字符串’123.456’转换成浮点数123.456
思路:
1、使用list.index(‘.’)函数,定位到“.”的位置n
2、使用map(int,list)将str强制转换成int型
3、list(map()),组装成list
4、以"."为分界线,将list按照整数部分,小数部分拆分成两个list
5、reduce(fun,list)将fun函数作用到list上,将list,变成整数/小数部分