python中高阶函数改写学生信息管理程序_Python编程高阶函数的应用

一.lambda表达式

lambda表达式又被称为匿名函数,它的格式是:lambda 参数列表:函数体

def add(x,y):

return x+y

add_lambda=lambda x,y:x+y

上述add函数和add_lambda函数是等价的。

二.map函数

map函数的格式是:map(函数体,可迭代输入)

list1=[1,2,3,4,5]

r=map(lambda x:x+x, list1)

print(list(r))

#[2, 4, 6, 8, 10]

map函数也可以同时传入两个可迭代输入

list1=[1,2,3,4,5]

r=map(lambda x,y:x+y, list1, list1)

print(list(r))

#[2, 4, 6, 8, 10]

三.filter过滤器

filter的格式是:filter(function or None,iterable)

它只留下function允许的数据

def is_not_none(s):

return s and len(s.strip())>0

list2=[' ','','hello',None,'word']

res=filter(is_not_none, list2)

print(list(res))

#['hello', 'word']

四.reduce函数

reduce函数的格式是:reduce(函数体,可迭代输入)

该函数每次都用上一次的运算结果

from functools import reduce

list1=[1,2,3,4,5]

f=lambda x,y:x+y

res=reduce(f,list1)

print(res)

#15

五.闭包

闭包:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包。

def make_filter(keep):

def the_filter(filename):

file=open(filename)

lines=file.readlines()

file.close()

filter_doc=[i for i in lines if keep in i]

return filter_doc

return the_filter

filter1=make_filter('8')#此处filter1相当于函数the_filter,其中参数keep是8

filter_res=filter1('data.csv')

闭包可以保持当前的运行环境,以棋盘游戏为例:

origin=[0,0]

def create(pos=origin):

def game(direction,step):

new_x=pos[0]+direction[0]*step

new_y=pos[1]+direction[1]*step

pos[0]=new_x

pos[1]=new_y

return pos

return game

player=create()

print(player([1,0],10))

print(player([0,1],20))

print(player([-1,0],10))

#[10, 0]

#[10, 20]

#[0, 20]

六.装饰器无参数的装饰器

import time

def runtime(func):

def get_time():

print(time.time())

func()

return get_time

@runtime

def student_run():

print("学生跑")

student_run()

#1562483631.967822

#学生跑

@runtime表示将函数student_run作为参数输入到闭包函数runtime中只有一个参数的装饰器

import time

def runtime(func):

def get_time(i):

print(time.time())

func(i)

return get_time

@runtime

def student_run(a):

print("学生跑")

student_run(1)

#1562484351.06295

#学生跑有2个参数的装饰器

import time

def runtime(func):

def get_time(i,j):

print(time.time())

func(i,j)

return get_time

@runtime

def student_run(a,b):

print("学生跑")

student_run(1,2)

#1562484469.297142

#学生跑有多个参数的装饰器

import time

def runtime(func):

def get_time(*args):

print(time.time())

func(*args)

return get_time

@runtime

def student_run(*args):

print("学生跑")

student_run(1,2,3)

#1562484609.308905

#学生跑关键字参数的装饰器,例如:a=2

import time

def runtime(func):

def get_time(**kwargs):

print(time.time())

func(**kwargs)

return get_time

@runtime

def student_run(**kwargs):

print("学生跑")

student_run(a=2)无参数、可变参数、关键字参数的装饰器

import time

def runtime(func):

def get_time(*args,**kwargs):

print(time.time())

func(*args,**kwargs)

return get_time

@runtime

def student_run(*args,**kwargs):

print("学生跑")

student_run(1,2,a=2)

#1562484875.115825

#学生跑

参考文献:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值