Python 函数的嵌套

函数的嵌套

  • 嵌套: 至少2层函数,嵌套在外层的就是外函数,嵌套在内层的就是内函数

    def outer():
    	inner()                              #  error
    	def inner():
    		print("我是内函数 ... ")
    	inner()                              # success
    
  • 内部函数可以直接在函数外部调用么 ? 不能

    inner()

  • 调用外部函数后,内部函数可以在函数外部调用吗 ? 不可以

    outer()
    inner()
    
  • 内部函数可以在函数内部调用吗? 可以

    outer()
    
  • 内部函数在函数内部调用时,是否有先后顺序

    outer()
    
  • 了解:

    python 语法 必须要先定义函数 , 在调用函数
    在其他语言中,可以先调用在定义,是允许的;
    
    因为在其他语言当中, 存在预加载机制:
    在编译代码之前,先把文件中的所有的函数,提前加载到内存中
    然后才真正的编译全部的文件代码
    
    python目前版本,还没有预加载的机制,所以只能先定义在调用;
    
  • 小练习 ,定义三个互相嵌套的函数,调用最内层函数

    outer函数的定义处
    a = 400
    id = 500
    def outer():
    	a = 300
    	
    	def inner():                         # inner的定义处
    		a = 200
    		def smaller():                   # smaller的定义处
    			a = 100
    			print("我是smaller函数", a)
    			print(id)
    		smaller()                        # smaller的调用处
    	inner()                              # 调用inner 函数
    
    outer()                                  #  函数的调用处
    
  • LEGB 原则 : 就近找变量原则

    找寻变量的调用顺序采用LEGB原则(即就近原则)
    B —— Builtin(Python); Python内置模块的命名空间      (内建作用域)
    G —— Global(module); 函数外部所在的命名空间         (全局作用域)
    E —— Enclosing function locals;外部嵌套函数的作用域 (嵌套作用域)
    L —— Local(function);当前函数内的作用域             (局部作用域)
    依据就近原则,从下往上 从里向外 依次寻找
    

版权声明:本文为qq_52330730原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。