Python05-内嵌函数和闭包

内嵌函数:

Python支持函数的嵌套,在函数里面定义的函数,无法在外部被调用。

闭包:

如果在一个内部函数里,对外部作用域(但不是全局作用域)的变量进行引用,那么函数就被认为是闭包。

(在Python里,所有东西都是变量,可以将函数直接返回。)

#eg1:
def FunX(x):
    def FunY(y):
        return x*y
    return FunY
i = FunX(8)
i → <fun ……>  #返回函数,没给y的值
type(i)<class 'function'>
i(5)40
#或者
FunX(8)(5)40
FunY(5)  →  报错
#eg2:
def Fun1():
    x = 5
    def Fun2():
        x* = x
        return x
    return Fun2
#Fun1()→  返回函数
#Fun1()()→ 报错
#第一个没错是因为return Fun2即返回函数,没有执行里面的操作,要fun1()()才执行
#闭包中不能修改外部作用域的局部变量,所以报错。

容器:字符串、列表啥都可以往里扔的叫容器类型。

def Fun1():
    x=[5]
    def Fun2():
        x[0] * = x[0]
        return x[0]
    return Fun2()
Fun1()25

(对于列表类型,函数可以直接使用全局列表而不需要采用上节课所说的global声明)

关键字 nonlocal

def Fun1():
    x = 5
    def Fun2():
        nonlocal x
        x* = x
        return x
    return Fun2()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值