python内嵌函数和闭包_学习笔记-小甲鱼Python3学习第二十讲:函数:内嵌函数和闭包...

内嵌函数和闭包

global关键字:内部作用域想要对外部作用域的变量进行修改时需要用到。

内嵌函数:内部函数作用域在外部函数作用域之内,且只能在外部函数内调用内部函数。

闭包:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

nonlocal关键字:可以在嵌套函数中修改嵌套作用域中的变量

----------------------分割线,哈哈哈---------------------------------

二、课后作业:

0.如果希望在函数中修改全局变量的值,应该使用什么关键字?

global

1.在嵌套的函数中,如果希望在内部函数修改外部函数的局部变量,应该使用什么关键字?

nonlocal

2.Python函数可以嵌套,但要注意访问的作用域问题哦,请问以下代码存在什么问题?

>>> def outside():

print('I am outside!')

def inside():

print('I am inside!')

>>> inside()

inside()是内嵌在outside()函数中的,不能在外部调用。

3.请问为什么代码A没有报错,但代码B却报错了?应该如何修改?

代码A:

>>> def outside():

var = 5

def inside():

var = 3

print(var)

inside()

>>> outside()

代码B:

>>> def outside():

var = 5

def inside():

print(var)

var = 3

inside()

>>> outside()

代码B中内嵌函数中的的var变量没有声明就调用,python为了保护变量的作用域,会将外部函数outside()的var变量屏蔽,因此嵌套函数无法访问到外部函数的var变量。如果要修改,可以使用nonlocal关键字。

修改如下:

>>> def outside():

var = 5

def inside():

nonlocal var

print(var)

var = 3

inside()

>>> outside()

4.请问如何访问funIn()呢?

>>> def funOut():

def funIn():

print('宾果!你成功访问到我啦!')

return funIn()

>>> funOut()

宾果!你成功访问到我啦!

5.请问如何访问funIn()呢?

>>> def funOut():

def funIn():

print('宾果!你成功访问到我啦!')

return funIn

>>> funOut()()

宾果!你成功访问到我啦!

6.以下是“闭包”的一个例子,请你目测下会打印什么内容?

>>> def funX():

x = 5

def funY():

nonlocal x

x += 1

return x

return funY

>>> a = funX()

>>> print(a())

6

>>> print(a())

7

>>> print(a())

8

当a=funX()的时候,只要a变量没有被重新赋值,funX()就没有被释放,也就是说局部变量x没有被重新初始化。所以说当全局变量不适用的时候,可以考虑使用闭包更安全稳定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值