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解释器自 ...
随机推荐
- javaweb之浏览功能
今天我们来写浏览功能,浏览主要是通过sql语句将数据库里的数据查出来,并显示在页面上. 一.dao层 在上一篇文章的基础上dao层加入浏览方法. public List<Course> l ...
- C#编写一个计算器
编写一个计算器,练习在窗体上添加控件.调整控件的布局,设置或修改控件属性,编写事件处理程序的方法. 代码: using System; using System.Collections.Generic ...
- jdbc连接MySQL数据库+简单实例(普通JDBC方法实现和连接池方式实现)
jdbc连接数据库 总结内容 1. 基本概念 jdbc的概念 2. 数据库连接 数据库的连接 DAO层思想 重构设计 3. 事务 概念 事务的ACID属性 事务的操作 4. 连接池 为什么要使用连接池 ...
- github账号&文章选题
----------------------------------------------------------- https://github.com/yanpanjiao github ...
- js判断时间格式不能超过30天
let first = this.data.date //开始时间 let second = e.detail.value //结束时间 var data1 = Date.parse(first.re ...
- flex布局图片和文字同级,文字过多导致图片变形问题
图片增加css样式即可 flex-grow: 0;flex-shrink: 0;
- linux原生命令行看上面的内容
上一页:Shift+pageUp 下一页:Shift+pageDown
- Codeforces Round #762 (Div. 3), CDE
(C) Wrong Addition Problem - C - Codeforces 题意 定义一种计算方式, 对于a+b=c, 给出a和c, 求b 题解 因为求法是从个位求得, 先求出来的最后输 ...
- 使用 HTML5 input 类型提升移动端输入体验(转翻译)
在过去的几年里,在移动设备上浏览网页已变得难以置信的受欢迎. 但是这些设备上的浏览体验,有时遗留很多的有待改进.当涉及到填写表单时,这一点尤为明显.幸运的是,HTML5规范引入了许多新input类型, ...
- 黑客入门——渗透必备神器Burpsuit的安装和简单使用教程
很多人没有听说过burp全称(BurpSuite)BurpSuite是一款白帽子,黑帽子渗透测试必备工具,通过拦截HTTP/HTTPS的web数据包,当浏览器和相关应用程序的中间人,进行拦截.修改 ...