一、名称空间

  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、实例:
    
 #!/usr/bin/env python3
#-*- coding:utf-8 -*- def outer():
name = 'sc'
def inner():
print('在inner内打印外部函数的变量',name)
return inner
f = outer() # 外层函数调用后,返回值为 inner,则f = inner
f()     # 此时,f() = inner() # 4行到10行就是一个完整的闭包过程

 
 
 
												

Python名称空间和闭包的更多相关文章

  1. python名称空间和作用域

    python名称空间和作用域 名称空间 名称空间:例如a=1000,python解释器会开辟一块新的内存来存贮1000这个变量值,然后会有一个a指向这个1000,那么a存在哪里?其实他和变量值差不多, ...

  2. python名称空间介绍

    python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...

  3. Python名称空间与作用域

    什么是名称空间? 比如下图的长方形代表内存,在这个内存里我要设置一个变量100,那么这个变量得有个门牌号,就叫他a吧,但其实变量不是这么存储的,他其实的存储方式是这样的,他会有一个名称空间,这个名称空 ...

  4. Python记录9:函数4:名称空间作用域+闭包函数+装饰器

    ''' 一: 名称空间namespaces     名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种     内置名称空间:         1. 特点: 存放是python解释器自 ...

  5. Python 名称空间与作用域、闭包与装饰器

    Python 的名称 Python 的名称(Name)是对象的一个标识(Identifier).我们知道,在 Python 里面一切皆对象,名称就是用来引用对象的.说得有点玄乎,我们以例子说明. 例如 ...

  6. Day11名称空间,作用域,闭包函数

    Day11 1.函数对象: ①可以被引用 ​ ②可以作为另一个函数的参数 ​ ③可以作为另一个函数的返回值0 ​ ④可以被存储到容器类型中 2.函数嵌套: ①嵌套调用:在一个函数中调用了另一个函数 ​ ...

  7. day11 python名称空间 作用域

    day11 python   一.三元运算符 def func(a, b):     return a if a > b else b   print(func(44,66))     二:函数 ...

  8. day 12 名称空间和闭包函数

    函数嵌套 按照函数的两个阶段分为: 嵌套调用:在一个函数内部调用另一个函数 嵌套定义:在一个函数内部定义另一个函数 名称空间(namespace):存储名字的内存区域 名称空间的分类: 内置名称空间: ...

  9. 从入门到自闭之Python名称空间

    名称空间: 内置空间:python解释器自带的一块空间 全局空间:py文件中顶格写的就是全局空间 局部空间:函数体中就是局部空间 加载顺序: 内置空间 全局空间 局部空间 # def func(): ...

随机推荐

  1. win7 无法链接到手机热点

    作为一个对电脑不太懂的小白来说,链接个热点都是问题,来看看我怎么解决的吧. 之前连上过这个手机的热点,隔了有段时间了,今天连不上了,这是啥问题? 另外一台没连过这个手机热点的电脑是可以链接成功了,纳尼 ...

  2. c/s和b/s的区别

    一.C/S 架构 1. 概念 C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库 ...

  3. [Scala]Scala学习笔记二 数组

    1. 定长数组 如果你需要一个长度不变的数组,可以使用Scala中的Array. val nums = new Array[Int](10) // 10个整数的数组 所有元素初始化为0 val str ...

  4. 浅析Java基本数据类型

    作为一种强类型语言,Java针对每一种数据都定义了明确的数据类型.大体来讲可分为:基本数据类型和引用数据类型:在此,主要讨论前者,后者以后再继续探究. Java基本数据类型分为四类八种: 1: 整数 ...

  5. Lua基础---循环语句

    Lua的循环和C语言的循环的语法其实差不多,所以,理解起来就很好理解的啦,所以实现也很简单,跟C没什么两样,都差不多. 案例如下: test1.lua -- 1.while循环 --[[ 理解为C语言 ...

  6. As3 Practises : use TheMiner do as3 project swf performance profile , find memory leak!

    The second and most universal way is to launch it from the mm.cfg fileTheMiner.swf must be trusted1: ...

  7. Java中最常见的十道面试题

    第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...

  8. MFC多语言程序版本,在不同的windows系统上的使用 FP_SetThreadUILanguage

    from: http://www.cnblogs.com/qijicxl/p/3840157.html 如何使MFC程序界面支持多国语言?这次使用后给自己做一个总结. 我们使用vc6.0的版本来试验 ...

  9. NOIP模拟题 友好国度

    题目大意 给定一棵树,每个点有点权,求有多少组点对满足两点简单路径上的所有点点权的$gcd=1$. $n,val_i\leq 10^5$ 题解 考虑设$G_i$表示简单路径上所有点点权均为$i$的倍数 ...

  10. ASP.NET中服务器控件的生命周期

    服务器控件的生命周期是创建服务器控件最重要的概念.作为开发人员,必须对服务器控件生命周期深刻理解.当然,这不是一朝一夕就可以做到的.对于学习控件开发技术的初学者,可以不必掌握得非常详细深入,只需对服务 ...