python闭包基础

因为在使用函数时,一旦调用完,函数内部的变量都会被销毁,如果要用函数内的变量进行进一步操作,比如:求和。将会变得麻烦。所以我们可以在函数内,部再定义一个函数。

闭包定义:

函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数,称为闭包。

闭包的作用:

闭包可以引用外部函数变量,且用完不销毁。

注意:

由于外部函数的变量没有被及时释放,所以会消耗内存。

代码演示:

# 闭包的定义格式

def outer():
    n = 1
    def inner():
        print(n)

    # 在外函数返回内函数的引用时,不能带()
    return inner

ret = outer()
print(ret)

 

闭包的使用:

def pperson(name):
    def say(msg):
        print(name + " says:" +msg)
    return say

syh = pperson('syh')
qkj = pperson('qkj')
syh('hello')
qkj('ikun')

同样效果的面向对象:

class person(object):
    def __init__(self,name):
        self.name = name

    def say(self,msg):
        print(self.name + ' says:' + msg)

syh = person('tom')
jack = person('jack')

syh.say('hello')
jack.say('fuck')

如何通过闭包内修改外函数的变量:

def outer():
    n = 1
    def inner():
        # 当在内函数中要修改外函数变量时,要用nonlocal声明   类似于globa
        nonlocal n
        n = n + 10
        print(n)
    return inner

func = outer()
func()
func()

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值