python 闭包_python 闭包

闭包

因为python中函数也可以当作对象,所以如果出现当我们返回一个函数,而该函数含有外部变量的时候就形成了闭包。

闭包的特点:

是个嵌套函数

可以获得非局部的变量

将函数当作对象返回

看一个例子会更易理解:

def make_printer(msg):

msg = "hi there"

def printer():

print(msg)

return printer

myprinter = make_printer("Hello there")

myprinter()

hi there

可以看出,myprinter返回的是函数对象(闭包特点3,1),而myprinter()则获取了printer()域之外的变量值(闭包特点2)

闭包和nonlocal

下面两个例子则是获得了域之外的,关键字nonlocal的使用获得累加的效果。

def make_counter():

count = 0

def inner():

nonlocal count # 去掉报错,count是不可变类型

count += 1

return count

return inner

counter = make_counter()

c = counter()

print(c)

c = counter()

print(c)

1

2

上文使用nonlocal 是因为int类型是不可变类型,若不使用nonlocal则,无法对inner()中的count 进行更改值

而对可变类型,则例子如下:

def make_summer():

data = []

def summer(val):

data.append(val)

_sum = sum(data)

return _sum

return summer

summer = make_summer()

s = summer(1)

print(s)

s = summer(2)

print(s)

1

3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值