打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python征途--嵌套函数/嵌套作用域/闭包
 Python中一个与众不同的语法就是可以嵌套函数,所谓嵌套,并不像其他语言中的在一个函数中调用另一个函数,而是在定义一个函数的时候,函数体里还能定义另一个函数。
内函数可以访问外函数的作用域,这就是《Python基础教程》P105里“它带着它的环境(和相关的局部变量)”及“由于Python的嵌套作用域,来自外部作用域的这个变量,稍后会被内层函数访问”。但是外部函数不能访问内部函数的作用域。

下面用编程实例来详细说明:
#在func_1()中定义了func_2(),func_2()中又定义了func_3()def func_1():    x1 = "func_1"    #print("x1 = %s,x2 = %s,x3 = %s" % (x1,x2,x3))运行此句出现错误    print("In func_1: x1 = %s" % x1)        def func_2():        x1 = "func_1_redefined"        #将X2声明为全局变量,这样才可以在其外层函数func_1()中使用        global x2         x2 = "func_2"        print("In func_2: x1 = %s,x2 = %s" % (x1,x2))        def func_3():            x3 = "func_3"            print("In func_3: x1 = %s,x2 = %s,x3 = %s" % (x1,x2,x3))        return func_3()        #调用func_2()使global x2被定义使用    func_2()    print("In func_1,again: x1 = %s,x2 = %s" % (x1,x2))

下面是运行结果(环境是Python 3.3.0): 

程序分析:
1)1只能访问自己定义的变量,2可以访问1和2中定义的变量但不能访问3中的变量,3可以访问所有变量;所以内部函数可以访问其外部函数的作用域,但是外部函数不能访问内部函数的作用域。
2)如果2中的变量被1访问到,可以用gloabl对其声明,但在使用前必须调用2。
3)若1,2中都有x1,则3中访问到的是2中的x1(离它最近的作用域中的x1),1中的x1不变(不被重新赋值)。

我的总结:
当函数实现的功能比较复杂,代码量比较大时,可以对函数进行分片,在这个函数的内部定义实现某一功能的函数,这样做的好处是代码易懂,并且可以对一部分变量封装,避免对变量的误操作。
书上说“存储子封闭作用域的行为叫做闭包”。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python基础
12步轻松搞定python装饰器
【2020Python修炼记 】Python语法入门--名称空间
python入门必学之装饰器,(附例子和详细说明)手把手教分分钟学会
从函数到包的Python代码层次
Python之函数的定义与使用示例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服