filter函数
-过滤函数:对一组数据进行过滤,符合条件的数据会生成一个新的列表返回
-利用给定函数进行判断
-返回值是一个布尔值
-格式:filter(func,data)
#filter案例
#对于一个列表对其进行过滤,偶数组成一个新的列表
def isEven(a):
return a%2==0
l=[1,2,3,4,5,6,7,8,9]
final=filter(isEven,l)
print(type(final))
for i in final:
print(i,end=' ')
<class ‘filter’>
2 4 6 8
高阶函数-排序
-把一个序列按照给定的算法排序
-key:在排序中对每一个元素进行key函数运算,可以理解成按照key函数定义的逻辑进行排序
#排序的案例
a=[4,6,2,34,8,5,78]
new_a=sorted(a,reverse=True)
print(new_a)
[78, 34, 8, 6, 5, 4, 2]
#排序案例2
a=[-5,-7,-8,-2,4,5,6,]
new=sorted(a,key=abs,reverse=True)
print(new)
[-8, -7, 6, -5, 5, 4, -2]
返回函数
#定义一个普通函数
def myF(a):
print(‘me’)
return none
#函数作为返回值反hi,被返回的函数在函数体内定义
def myF2():
def myF3():
print('f3')
return 3
return myF3
#使用:调用myF2,返回一个函数myF3,并赋值给f3
f3=myF2()
#赶回函数2
def myF4(*args):
def myF5():
sum=0
for n in args:
sum=sum+n
print(sum)
return myF5
f5=myF4(1,2,3,4,5,6,7,8)
f5()
36
闭包
-当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,
党内部函数被当作返回值的时候,相关参数和变量保存在返回的函数中,这种结果,叫做闭包。
-返回闭包时,返回函数不能引用任何循环变量
装饰器
-再不改动函数代码的基础上无限制扩展函数功能的一种机制,本质上讲,装饰器是一个返回函数的高阶函数
-使用@语法
def hello():
print(‘hello’)
#对hello功能进行扩展,每次打印之前打印系统时间,并且不能改动现有的代码
import time
#高阶函数,一函数作为参数
def printTime(f):
def wrapper(*args,**kwargs):
print('time:',time.ctime())
return f(*args,**kwargs)
return wrapper
#上面定义了装饰器,使用的时候需要用到@符号
@printTime
def hello():
print('hello harbin')
hello()
time: Mon Dec 10 10:28:54 2018
hello harbin
#另一种方法shiyong装饰器
hello=printTime(hello)
hello()
偏函数
-参数固定的函数,相当于一个由特定参数的函数体
-functools.partial的作用是把一个函数某些参数固定,返回一个新韩淑
#把一个八进制的字符串12345,表示成十进制的数字
int('12345',base=8)
5349
#新建函数默认输入的字符串时16进制,返回十进制
def int16(x,base=16):
retrun int(x,base)
int16('12345')
74565
import functools
#实现上面int16的功能
int16=functools.partial(int,base=16)
int16('12345')
74565