deffunA():print("In funA")
funB = funA
funB()>>>
In funA
函数名称是变量
funA和funB是指名称不一样
既然时变量就可以当参数传入
# funA是一个普通函数,deffunA(n):return n *100deffunC(n, f):return f(n)*3print(funC(9, funA))>>>2700
map
原意就是映射,即把集合或者列表的元素,每一个人元素都按照一定规则进行操作,生成一个新的列表或者集合
map函数时系统提供的具有映射功能的函数,返回值是一个迭代对象
l1 =[i for i inrange(10)]defmulTen(n):return n*10
l2 =map(mulTen, l1)# l2的类型是可迭代的,直接用for、循环遍历for i in l2:print(i)
reduce
原意是归并,缩减
把一个可迭代的内容最后归并为一个结果
对于作为参数的函数要求,必须有两个参数,必须有两个返回结果
reduce([1,2,3,4,5]) == f(f(f(f(1,2),3),4),5)
需要导入functools包
from functools importreducedefmyAdd(x,y):return x+y
# 先把前两个参数计算,返回值再与第三个数计算,返回值再与第四个数计算......
rst =reduce(myAdd,[1,2,3,4,5,6])print(rst)>>>21
filter 过滤函数
过滤函数,对一组数据进行过滤,符合条件的数据会生成一个新的列表返回
跟map相比较
相同:都对列表的每一个元素进行操作
不同:
map生成一个跟原来数据相对应的新列表
filter不一定,只要符合条件的才会进入新的数据集合
filter函数怎么写:
利用给定函数进行判断
返回值一定时布尔值
调用格式:filter(f,data),f时过滤函数,data数据
# 对于一个列表,对其进行过滤,偶数组成一个新列表defisEven(a):return a%2==0
l =[3,4,45,23,345,56,57,56,8,86,9,45,24,2]
rst =filter(isEven, l)print([i for i in rst])>>>[4,56,56,8,86,24,2]
排序
把一个序列按照给定算法进行排序
key:在排序前对每一个元素进行key函数运算
a =[23,43,5,65,77,68,99,732,4]
al =sorted(a, reverse =True)# reverse倒序print(al)>>>[732,99,77,68,65,43,23,5,4]-----
a =[-23,34,54,675,78,-54,-76,3]# 按照绝对值排序
al =sorted(a, key=abs, reverse =True)print(al)>>>[675,78,-76,54,-54,34,-23,3]-----
astr =['dana','Danna','nihao','Taobao']str=sorted(astr)print(str)>>>['Danna','Taobao','dana','nihao']
返回函数
函数可以返回具体的值
也可以返回一个函数作为结果
# 函数作为返回值返回,被返回的函数在函数体内定义defmyF2():defmyF3():print("In myF3")return3return myF3
f3 = myF2()print(type(f3))print(f3)print(f3())>>><class'function'><function myF2.<locals>.myF3 at 0x000001525EA8BC80>
In myF3
3
defmyF4(*args):defmyF5():
rst =0for n in args:
rst += n
return rst
return myF5
f5 = myF4(1,2,3,4,5,6,7,8,9,0)print(f5())>>>45