python学习第十站:函数三

一、高阶函数

1、简介

特点:

  • 接受一个或多个函数作为参数
  • 将函数作为返回值返回
    一般思路⬇️
# 将一个指定列表中的偶数保存到新列表中返回
l = [1,2,3,4,5,6,7,8,9,10]
def f(l):
    new_l = []#新列表
    for n in l:
        if n % 2 == 0:
            new_l.append(n)
    return new_l
print(f(l))

高阶写法

l = [1,2,3,4,5,6,7,8,9,10]
def f2(i):
    if i % 2 == 0:
        return True
def f(func,l):#传入函数
    new_l = []
    for n in l:
        if func(n):
            new_l.append(n)
    return new_l
print(f(f2,l))

2、匿名函数

list(filter(f2,l))
filter(函数,参数) # 实现相关功能

lambda函数表达式:用来创建简单的函数
语法:
lambda 参数列表:返回值
print((lambda a,b:a+b)(5,6))
或者
f = lambda a,b:a+b
print(f(4,6))

二、闭包

  • 将函数作为返回值返回
  • 通过闭包创建只有当前函数访问的变量
def fn():
	a = 10
	def fn2():
		print('fff',a)
	return fn2
r = fn()
r()

定义平均数函数

n2 = [] #全局,都能使用
def average(n):
	n2.append(n)
	return sum(n2)/len(n2)
print(average(3))
def Fun():
	n2 = [] #全局,都能使用
	def average(n):
		n2.append(n)
		return sum(n2)/len(n2)
	return average
print(fun(3))

现成闭包的条件:

  • 函数嵌套
  • 将内部函数作为返回值返回
  • 内部函数必须使用到外部函数的变量

三、装饰器

通过修改函数中代码完成修改需求

  • 如果修改的函数过多,修改比较麻烦
  • 不方便后期维护
  • 违反开闭原则(ocp原则)要求开发对程序的扩展,关闭对程序的修改
    希望在不修改原函数的前提下,对函数扩展功能
def f():
	print('iam func')
def f2()
	print('start....')
	f()
	print('end')
f2()

通用:

def f_print():
	print('just for test')
def f_add(a,b):
	return a+b
def add_info(old):#装饰器,不修改原函数而修改原功能
	def new_func(*args,**kwargs):
		print("start print...")
		return_info = old(*args,**kwargs)
		print("end print...")
		return return_info
f = add_info(f_add)
print(f(2,6))

简便来调用装饰器

@add_info #装饰器函数
def func_X():
	print(iam add_info function's son) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值