zoukankan      html  css  js  c++  java
  • 嵌套函数

    嵌套函数

    Python语言允许在定义函数的时候,其函数体内又包含另外一个函数的完整定义,这就是我们通常所说的嵌套定义;

    实例1:

    def foo():         

        m=3            

        def bar():    

            n=4       

            print m+n  

    return bar()      

    ----------------------------嵌套函数作用域问题---------------------------

    Python中一个与众不同的语法就是可以嵌套函数,所谓嵌套,并不像其他语言中的在一个函数中调用另一个函数,而是在定义一个函数的时候,函数体里还能定义另一个函数。

    内函数可以访问外函数的作用域。但是外部函数不能访问内部函数的作用域。

    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"

         

            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()

    1)1只能访问自己定义的变量,2可以访问1和2中定义的变量但不能访问3中的变量,3可以访问所有变量;所以内部函数可以访问其外部函数的作用域,但是外部函数不能访问内部函数的作用域。

    2) 若1,2中都有x1,则3中访问到的是2中的x1(离它最近的作用域中的x1),1中的x1不变(不被重新赋值)

  • 相关阅读:
    本地缓存方式
    iOS Touch ID 身份认证
    iOS之WKWebView
    [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
    iOS利用UIDocumentInteractionController和Quick Look打开或预览文档
    轮播图的无限轮播
    贝赛尔曲线UIBezierPath(后续)
    贝赛尔曲线UIBezierPath
    NSRunLoop的进一步理解
    CADisplayLink 及定时器的使用
  • 原文地址:https://www.cnblogs.com/liang545621/p/7523551.html
Copyright © 2011-2022 走看看