码迷,mamicode.com
首页 > 编程语言 > 详细

Python名称空间和闭包

时间:2018-02-05 21:57:15      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:env   turn   mic   family   body   函数定义   utf-8   inner   函数   

一、名称空间

  1、定义:又名 name space,顾名思义,就是存放名字的地方。比如:若变量x = 1,1存放在内存中,

      而名称空间正是存放名字x与1绑定关系的地方。

  2、分类:
      locals : 函数内的名称空间,包括局部变量和形参
  
      globals: 全局变量
        builtins:内置模块的名字空间

      注意:不同变量的作用域就是由这个变量所在的命名空间决定的。

  3、
作用域(范围)

     全局范围:全局有效

     局部范围:局部有效
     查看作用域方法:globals(),locals()

  4、作用域的查找顺序:LEGB
    L:locals是函数内的名字空间

    E:enclosing(围住) 是外部嵌套函数的名字空间
  
    G:globals 全局变量
    B:builtins内置模块的名字空间
  实例:
age = 20
def func1():
    age = 18
    print(func1:,age) # func1:18
    def func2():
        age = 28
        print(func2:,age) # func2:28
        def func3():
            print(func3:,age) # func3:28
        func3()
    func2()
func1()
print(全局:,age) # 全局:20

 

二、函数闭包

  1、定义:     

      闭包就是函数定义和函数表达式位于另一个函数的函数体内(嵌套函数)。而且,这些内部函数可以访问
    它们所在的外部函数中声明的所有局部变量、参数,当其中一个这样的内部函数在包含它们的外部函数之外
    被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它
    仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)
    的值是外部函数返回时的值,但也会受到内部函数的影响。
 2、闭包的意义:
    返回的函数对象。不仅仅是一个函数对象,在该内部函数外还包裹了一层作用域,这使得,该函数无论
    在何处调用,优先使用自己外层包裹的作用域。
  3、实例:
    
 1 #!/usr/bin/env python3
 2 #-*- coding:utf-8 -*-
 3 
 4 def outer():
 5     name = sc
 6     def inner():
 7         print(在inner内打印外部函数的变量,name)
 8     return inner
 9 f = outer() # 外层函数调用后,返回值为 inner,则f = inner
10 f()     # 此时,f() = inner()
11 
12 # 4行到10行就是一个完整的闭包过程

 

 
 
 


Python名称空间和闭包

标签:env   turn   mic   family   body   函数定义   utf-8   inner   函数   

原文地址:https://www.cnblogs.com/schut/p/8419145.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!