1、 先回归历史:什么是函数
函数就是通过将局部【目标】实现并封装起来, 后续可直接拿来用
2、 函数式编程: 是把运算过程尽量写成一系列嵌套的函数调用
一、返回函数
返回函数: 函数作为返回值
闭包: 函数内部定义函数, 我们叫做内部函数, 内部函数可以引用外部函数的参数/局部变量, 当调用外部函数返回的是哪部函数时, 参数/变量都保存在返回的函数中,这种就叫做【闭包】
案例: 相加一堆数字,计算出最终结果
[关键字] 闭包
list1 = list(range(0, 10))
list2 = list(range(0, 20))
# 1、 普通实现
def calc_sum(*args):
sum = 0
for one in args:
sum = sum + one
return sum
# 2、返回函数
def return_sum(*args):
def sum():
sum_total = 0
for one in args:
sum_total = sum_total + one
return sum_total
return sum
a = return_sum(*list1)
b = return_sum(*list1)
print(a == b)
print(a)
print(a())
调用外部函数时,每次调用都是一个新的函数,故而:如果传入相同参数, 会发现相互不影响
对与闭包函数使用, 调用外部函数时,其实并没有执行,直到调用了内部函数才会执行
【特别注意】
1、 闭包时:尽量避免在返回函数中引用可变化的变量
2、 内层函数引用外层函数局部变量,如果未赋值可正常执行 ----如图2案例
3、 内层函数引用外部函数且对外层变量重新赋值,会报错—见图3
但是如果想要正常运行, 可以增加nonlocal声明变量非当前内部函数局部变量,具体见图4
二、 匿名函数lambda
此处用法不再详细赘述,可参考上一节《5.4 python内置高阶函数之--map、reduce、filter、sorted》中map用法中关于lambda的使用说明,如有疑问,可评论或私聊再学习
三、 偏函数
1、 【什么是偏函数】
偏函数就是对之前的使用到的函数进行包装,将现在存在的函数的一些参数存到指定值中,最后得到一个新的函数
2、【偏函数的作用】
就是把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
3、 【基本语法】from functools import partial
偏函数名 = partial(func, *args, **kwargs)
def get_div(m, n):
return m % n == 0
def get_div2(m, n, c):
return m * n % c == 0
from functools import partial
div_1 = partial(get_div, n=3)
print(div_1(100))
print(div_1(96))
div_2 = partial(get_div2, c=3)
print(div_2(4, 6))
print(div_2(7, 5))