空间名称与闭包函数

名称空间

名称空间 namespaces:存放名字的地方,是对栈区的划分

名称空间在栈区中分为三种,详细的划分不同的空间,不同空间可以存放相同名字的名字

内置名称空间

存放的名字:存放的python解析器内置的名字

存活周期:python解析器启动则产生,python解析器关闭则销毁

全局名称空间

存放的名字:运行顶级代码所产生的名字,不是函数内定义的以及不是python自带的名字

存活周期:python文件执行则产生,python文件运行完毕后销毁

局部名称空间

存放的名字:在调用函数时,运行函数体代码的过程中产生的函数内的名字

存活周期:在调用函数时存活,函数调用完毕后销毁

名称空间的加载顺序

内置名称空间 > 全局名称空间 > 局部名称空间

名称空间销毁顺序

局部名称空间 > 全局名称空间 > 内置名称空间

名字查找优先级

从当前位置线上一层一层查找

例如:当前在局部名称空间

局部名称空间 > 全局名称空间 > 内置名称空间

名称空间的嵌套关系

以函数定义阶段为准,与函数调用位置无关

x = 1
def func():
print(x)
def foo():
x = 222
func()
foo()
#输出结果
1

作用域

全局作用域:内置名称空间、全局名称空间

  1. 全局存活
  2. 全局有效:被所以函数共享

局部作用域:局部名称空间

  1. 临时存活
  2. 局部有效:函数内有效

闭包函数

闭包函数 = 名称空间与作用域 + 函数嵌套 + 函数对象

核心:名字的查找关系是以函数定义阶段为准

什么是闭包函数

“闭”函数是指该函数是内嵌函数

“包”函数是指该函数包含对外层函数作用域的引用(不是对全局作用域)

def f1():
x = 1
def f2():
print(x)
return f2 #返回f2的内存地址,f2函数对象 x = 111111
f = f1() #把f2的内存地址给f
f() #执行f2函数
#输出结果
1

Python 空间名称与闭包函数的更多相关文章

  1. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  2. Python之旅Day4 闭包函数 模块及模块倒入

    闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...

  3. python基础语法7 闭包函数与装饰器

    闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) f ...

  4. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  5. Python 的名称空间和作用域

    最开始对名称空间的了解是在学习函数的时候,那时候知道了作用域的查找顺序,以及全局名称空间和局部名称空间,产生疑惑的时候为学递归的时候,那时候还没有名称空间这个概念,只知道递归有个最大深度,那时候以后递 ...

  6. python函数之闭包函数与无参装饰器

    一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...

  7. Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数

    本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...

  8. Python之函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器

    目录 一 函数对象 二 函数的嵌套 三 名称空间和作用域 四 闭合函数 五 装饰器 一.函数对象 1.函数是第一类对象 #第一类对象的特性:# 可以被引用 # 可以当做参数传递 # 返回值是函数 # ...

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

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

随机推荐

  1. java中finally块儿是怎么工作的?有什么意义?

    10.finally块 马克-to-win:finally块儿是怎么工作的?有什么意义?finally关键字创建一个代码块.没有try,finally块儿不能单独存在.该代码块在一个try/catch ...

  2. vue Element验证input提示

    <el-form-item prop="userName" class="userName_color"> <b>详细地址<i c ...

  3. JAVASE Scanner

    package com.huang.boke.flowPath;import java.util.Scanner;public class test01 { public static void ma ...

  4. numpy教程05---ndarray的高级操作

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  5. python---插入排序的实现

    插入排序 思想 ​ 列表被分为有序区和无序区两个部分, 最初有序区只有一个元素, 每次从无序区选择一个元素, 插入到有序区的位置, 直到无序区变空 import random from cal_tim ...

  6. 线程的概念及Thread模块的使用

    线程 一.什么是线程? 我们可以把进程理解成一个资源空间,真正被CPU执行的就是进程里的线程. 一个进程中最少会有一条线程,同一进程下的每个线程之间资源是共享的. 二.开设线程的两种方式 开设进程需要 ...

  7. linux centos 8.2 安装docker

    1 使用yum -y install docker安装后启动docker提示Failed to start docker.service: Unit docker.service not found. ...

  8. Unity-动画状态机使用细节记录

    Unity动画控制器Animator功能非常强大,总结一些具体使用细节,在动作游戏中很实用: 1.动画烘焙 不同动画之间,可能存在角色朝向,重心高度不一致: 可以在动画Eidt界面设置RootTran ...

  9. Java语言学习day36--8月11日

    ###10集合迭代中的转型 A:集合迭代中的转型 a:在使用集合时,我们需要注意以下几点:  集合中存储其实都是对象的地址.  集合中可以存储基本数值吗?jdk1.5版本以后可以存储了. 因为出现 ...

  10. 缓存中间件-Redis(二)

    在上一篇中我们简单总结和介绍了Redis的几个方面 1.使用Redis背景 2.Redis通信多路复用的基本原理 3.Redis基本数据结构 4.Redis持久化方式 这一篇我们使用简单的业务场景来介 ...