python函数式编程(2)

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

猜你喜欢

转载自blog.csdn.net/qq_41609475/article/details/84936512
今日推荐