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、实例:
#!/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名称空间和闭包的更多相关文章
- python名称空间和作用域
python名称空间和作用域 名称空间 名称空间:例如a=1000,python解释器会开辟一块新的内存来存贮1000这个变量值,然后会有一个a指向这个1000,那么a存在哪里?其实他和变量值差不多, ...
- python名称空间介绍
python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...
- Python名称空间与作用域
什么是名称空间? 比如下图的长方形代表内存,在这个内存里我要设置一个变量100,那么这个变量得有个门牌号,就叫他a吧,但其实变量不是这么存储的,他其实的存储方式是这样的,他会有一个名称空间,这个名称空 ...
- Python记录9:函数4:名称空间作用域+闭包函数+装饰器
''' 一: 名称空间namespaces 名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种 内置名称空间: 1. 特点: 存放是python解释器自 ...
- Python 名称空间与作用域、闭包与装饰器
Python 的名称 Python 的名称(Name)是对象的一个标识(Identifier).我们知道,在 Python 里面一切皆对象,名称就是用来引用对象的.说得有点玄乎,我们以例子说明. 例如 ...
- Day11名称空间,作用域,闭包函数
Day11 1.函数对象: ①可以被引用 ②可以作为另一个函数的参数 ③可以作为另一个函数的返回值0 ④可以被存储到容器类型中 2.函数嵌套: ①嵌套调用:在一个函数中调用了另一个函数 ...
- day11 python名称空间 作用域
day11 python 一.三元运算符 def func(a, b): return a if a > b else b print(func(44,66)) 二:函数 ...
- day 12 名称空间和闭包函数
函数嵌套 按照函数的两个阶段分为: 嵌套调用:在一个函数内部调用另一个函数 嵌套定义:在一个函数内部定义另一个函数 名称空间(namespace):存储名字的内存区域 名称空间的分类: 内置名称空间: ...
- 从入门到自闭之Python名称空间
名称空间: 内置空间:python解释器自带的一块空间 全局空间:py文件中顶格写的就是全局空间 局部空间:函数体中就是局部空间 加载顺序: 内置空间 全局空间 局部空间 # def func(): ...
随机推荐
- C#实现文件与二进制互转并存入数据库
这篇文章主要介绍了C#实现文件与二进制互转并存入数据库,本文直接给出代码实例,代码中包含详细注释,需要的朋友可以参考下 //这个方法是浏览文件对象 private void button1_C ...
- ffmpeg推送RTSP直播流到EasyDarwin报错问题的修复
在之前的博客<ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播>中,我们介绍了如何采用ffmpeg进行RTSP推送,实现EasyDarwin直播分发的功能,近期 ...
- 软件测试 Record
fxcopnunit软件质量 EDW 数据仓库ETL KPI 敏捷 测试计划 单元测试 集成测试 系统测试 对测试结果 阶段性 分析 总结 测试结果报告 环境问题:软硬件用户有问题,我们这边没有有效问 ...
- ORM版,学生信息管理单表查询..
mysql 建学生表及课程表 添加内容 view.py from django.shortcuts import render,HttpResponse,redirect from . import ...
- linux ls-al 指令详解
ls -al 具体说明请自行找男人(man 中了鸟哥的毒 =.=).
- XE7/10诡异报错brcc32错误
重新编译工程时,报错: 之前没遇到过,解决方法: 重新设置下Application Icon,再build,问题解决.
- HDU - 3949 :XOR(线性基,所有集合的不同异或和中,求从小到大第K个)
XOR is a kind of bit operator, we define that as follow: for two binary base number A and B, let C=A ...
- js 预解析
前言 JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了 ...
- 使用MSBuild实现完整daily build流程
一.MSBuild 在微软软件开发中,每日构建是最重要的过程之一,被称为微软产品开发的“心跳”.简单来看,每天构建系统将整个产品解决方案完整构建一遍,生成的目标文件和安装文件被放置在一个共享位置.接着 ...
- 从如何优化SQL入手,提高数据仓库的ETL效率
1 引言数据仓库建设中的ETL(Extract, Transform, Load)是数据抽取.转换和装载到模型的过程,整个过程基本是通过控制用SQL语句编写的存储过程和函数的方式来实现对 ...