天天看点

闭包|学习笔记

开发者学堂课程【Python 语言基础 3:函数、面向对象、异常处理:闭包】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:

https://developer.aliyun.com/learning/course/601/detail/8737

闭包​

目录

一、 闭包的定义

二、 形成闭包的条件

一、闭包的定义

#将函数作为返回值返回,是一种高阶函数

#这种高阶函数被称为闭包,通过闭包可以创建一些只有当前函数能访问的变量

#可以将一些私有的数据藏到闭包中

d

​​

ef fn():

a = 10

#函数内部再定义一个函数

def inner():

print(‘

我是f

n2’, a )

#将内部函数 inner 作为返回值返回

return inner

#r 是一个函数,是调用fn()后返回的函数

#这个函数是在 fn() 内部定义,不是全局函数

# 这个函数能访问到 fn() 函数内的变量

r

 = fn()

#

r()

#求多个数的平均值

n

ums = [50,30,20,10,77]

# sum() 用来求一个列表中所有元素的和

p

rint(sum(nums))

二丶形成闭包的条件

#形成闭包的要点:

#1.函数嵌套

#2.将内部函数作为返回值返回

#3.内部函数必须要使用外部函数的变量

求列表中所有元素的平均值

p

rint(sum(nums)/

len

())

#创建一个列表,用来保存数值

nums

 = []

#创建一个函数,用来结算平均值

d

ef averager(n):

#将n添加到列表中

nums.append(n)

#求平均值

return sum(nums)/len(nums)

p

rint(averager(10))

p

rint(averager(10))

p

rint(averager(30))

p

rint(averager(30))

nums

 = []

d

ef make_averager():

d

ef averager(n):

nums.append(n)

return sum(nums)/len(nums)

r

eturn average

average = make_averager()

p

rint(average(10))

p

rint(average(20))

p

rint(average(30))

p

rint(average(40))