zoukankan      html  css  js  c++  java
  • Python名称空间和闭包

    一、名称空间

      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行就是一个完整的闭包过程
    
    
    
     
     
     


  • 相关阅读:
    hdoj 3376,2686 Matrix Again 【最小费用最大流】
    Trustie站点代码托管使用指南
    POJ 2442 Sequence(堆的使用练习)
    猛犸机器学习开发实践
    关于《金字塔原理》的主要内容
    实战案例:如何快速打造1000万+播放量的抖音网红?
    【限时特惠】网易云易盾验证码全线95折!智能无感知、滑动拼图、点选验证-7天免费体验!
    当GDPR来敲门,中国互联网企业该如何应对?
    H5活动产品设计指南基础版
    Box(视图组件)如何在多个页面不同视觉规范下的复用
  • 原文地址:https://www.cnblogs.com/schut/p/8419145.html
Copyright © 2011-2022 走看看