Python 空间名称与闭包函数
空间名称与闭包函数
名称空间
名称空间 namespaces:存放名字的地方,是对栈区的划分
名称空间在栈区中分为三种,详细的划分不同的空间,不同空间可以存放相同名字的名字
内置名称空间
存放的名字:存放的python解析器内置的名字
存活周期:python解析器启动则产生,python解析器关闭则销毁
全局名称空间
存放的名字:运行顶级代码所产生的名字,不是函数内定义的以及不是python自带的名字
存活周期:python文件执行则产生,python文件运行完毕后销毁
局部名称空间
存放的名字:在调用函数时,运行函数体代码的过程中产生的函数内的名字
存活周期:在调用函数时存活,函数调用完毕后销毁
名称空间的加载顺序
内置名称空间 > 全局名称空间 > 局部名称空间
名称空间销毁顺序
局部名称空间 > 全局名称空间 > 内置名称空间
名字查找优先级
从当前位置线上一层一层查找
例如:当前在局部名称空间
局部名称空间 > 全局名称空间 > 内置名称空间
名称空间的嵌套关系
以函数定义阶段为准,与函数调用位置无关
x = 1
def func():
print(x)
def foo():
x = 222
func()
foo()
#输出结果
1
作用域
全局作用域:内置名称空间、全局名称空间
- 全局存活
- 全局有效:被所以函数共享
局部作用域:局部名称空间
- 临时存活
- 局部有效:函数内有效
闭包函数
闭包函数 = 名称空间与作用域 + 函数嵌套 + 函数对象
核心:名字的查找关系是以函数定义阶段为准
什么是闭包函数
“闭”函数是指该函数是内嵌函数
“包”函数是指该函数包含对外层函数作用域的引用(不是对全局作用域)
def f1():
x = 1
def f2():
print(x)
return f2 #返回f2的内存地址,f2函数对象
x = 111111
f = f1() #把f2的内存地址给f
f() #执行f2函数
#输出结果
1
Python 空间名称与闭包函数的更多相关文章
- Python 函数对象-函数嵌套-名称空间与作用域-闭包函数
今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...
- Python之旅Day4 闭包函数 模块及模块倒入
闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...
- python基础语法7 闭包函数与装饰器
闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) f ...
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域
一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...
- Python 的名称空间和作用域
最开始对名称空间的了解是在学习函数的时候,那时候知道了作用域的查找顺序,以及全局名称空间和局部名称空间,产生疑惑的时候为学递归的时候,那时候还没有名称空间这个概念,只知道递归有个最大深度,那时候以后递 ...
- python函数之闭包函数与无参装饰器
一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...
- Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数
本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...
- Python之函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器
目录 一 函数对象 二 函数的嵌套 三 名称空间和作用域 四 闭合函数 五 装饰器 一.函数对象 1.函数是第一类对象 #第一类对象的特性:# 可以被引用 # 可以当做参数传递 # 返回值是函数 # ...
- Python记录9:函数4:名称空间作用域+闭包函数+装饰器
''' 一: 名称空间namespaces 名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种 内置名称空间: 1. 特点: 存放是python解释器自 ...
随机推荐
- python正则表达式替换或去除指定字符
代码: import re regEx = "[\n""|]" # 去除字符串中的换行符.中文冒号.|,需要去除什么字符就在里面写什么字符 str= re.su ...
- PYthon窗口学习之用异步请求解决Treeview列表插入大量数据反应慢的解决办法
当列表插入大量数据时,经常会等一会才显示数据 异步请求就将每一个插入语句并发运行,从而提高插入速度 代码: # 显示结果 def insert_result(table, info): def ins ...
- source /etc/profile 不起作用?
给Linux配置了环境变量,source /etc/profile 完成之后只在当前用户下起作用,切换用户后设置的环境变量竟然没有生效!重启后虽然生效了,但是想知道怎么回事. 找到了如下解答: 假设你 ...
- 彻底理解synchronized
1. synchronized简介 在学习知识前,我们先来看一个现象: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public ...
- 使用pyinstaller库打包文件
1.pyinstaller的安装 先win+r打开cmd,安装具体命令如下: pip3 install pyinstaller 2.使用pyinstaller库打包文件 假设Python源文件LPR ...
- .NET如何快速比较两个byte数组是否相等
目录 前言 评测方案 几种不同的方案 For循环 Memcmp 64字长优化 SIMD Sse Avx2 SequenceCompare 总结 参考文献 前言 之前在群里面有群友问过一个这样的问题,在 ...
- Struts2-使用forEach标签+el标签获取值栈数据
import cn.web.body.User; import com.opensymphony.xwork2.ActionSupport; import java.util.ArrayList; i ...
- Struts2-向值栈中存放数据
1.第一种 获取值栈对象,调用值栈对象里面的set方法(该方法添加的是一个Map集合) //第一种方式,使用值栈对象获取对象里面的set方法 //1.获取值栈对象 ActionContext cont ...
- Kubernetes架构-图解
- oracle 11g手工建数据库过程
创建需求和目的 1.需要把11机器上的oracle库中的表导入到12机器oracle库 2.11机器上的数据库fp在12机器上不存在,需要创建新库,以便导入.3.我们只需导入业务库shp即可,不需要把 ...