Python基础—名称空间(Day10)
一、名称空间和作用域
1.全局名称空间(名称空间、命名空间):
py文件运行时代码从上之下依次执行,看到一个变量就会将这个变量与对应值的内存地址的关系存到名称空间里,代码要运行时(print时)从名称空间里找变量与对应值的内存地址,通过内存地址找到对应的值。
2.局部名称空间(临时名称空间):
函数名放在内存地址里,当执行函数时,会在内存中开辟一个临时名称空间 ,存放函数体内的所有变量与值的关系。随着函数的执行完毕,临时空间自动关闭。
3.内置名称空间:所有的内置函数等存储的空间。
加载顺序:内置名称空间---->全局名称空间---->(函数执行时)局部名称空间
取值顺序:(函数执行时)局部名称空间--->全局名称空间---->内置名称空间

4.全局作用域:包含全局名称空间,内置名称空间,在整个文件的任意位置都能被引用,全局有效。
局部作用域:局部名称空间,只在局部范围内有效。
5.内置函数
globals:将全局名称空间的所有变量放在一个字典里。
lacals:将局部名称空间里的变量放在一个字典里。
6.关键字
global作用:
1)在局部名称空间内声明一个全局变量。
def func1():
global name
name='老男孩'
print(name)
func1()
print(name) 执行结果:
老男孩
老男孩
2)在局部名称空间内改变一个全局变量。
name='wusir'
def func1():
global name
name='老男孩'
print(name)
func1()
print(name) 执行结果:
老男孩
老男孩
nonlocal(python2中没有):
1.不能修改全局作用域。
a=4
def func1():
nonlocal a
a=5
print(a)
func1()
print(a) 报错#a是全局
2.在局部作用域中,对父级作用域(后者更外层的作用域非全局作用域)的变量进行引用和修改,并且引用的哪层从哪层及以下的变量全部发生改变。
a=4
def func1():
b=6
def func2():
nonlocal b #从这层起对b进行修改
b=666
print(b)
func2()
print(b)
func1() 执行结果:
666
666
二、函数的嵌套
函数调用时执行
代码从上至下依次执行,调用函数时函数里面从上之下依次执行
def f1():
print('in f1')
def f2():
print('in f2')
f2()
f1() 执行结果:
in f1
in f2
def f1(): #print('in f3')
def f2(): #print('in f1')
def f3(): #print('in f2')
print('in f3')
print('in f2')
f3()
print('in f1')
f2()
f1()
执行结果:
in f1
in f2
in f3
三、函数名的本质
函数名是函数的名字,本质是变量(特殊的变量),函数名()表示执行此函数。
1.单独打印函数名返回函数的地址。
def func1():
print(666)
print(func1) 执行结果:
<function func1 at 0x000000D735492400>
2.函数名的赋值。
def func2():
print(666)
f=func2
print(f()) 执行结果:
666
None
3.函数名可以作为容器类数据的元素。
def f1():
print(11)
def f2():
print(22)
def f3():
print(33) l1=[f1,f2,f3]
for i in l1:
i() l1=[]
for i in range(1,4):
l1.append('f'+str(i))
print(l1) for i in l1:
eval(i)()
4.函数名可以作为参数。
a=1
def f1(x):
print(x)
f1(a) 执行结果:
1
5.函数名可以作为函数的返回值。
def f11(x):
return x
ret=f11(5)
print(ret) 执行结果:
5
四、闭包
闭包就是内层函数对外层函数(非全局)变量的引用。
def wraaper1():
name='guo'
def inner():
print(name)
inner()
print(inner.__closure__)
wraaper1() 执行结果:
guo
(<cell at 0x00000073DFFA7228: str object at 0x00000073DFF8CDF8>,)
当函数开始执行时,如果遇到了闭包,它有一个机制,它会永远开辟一个内存空间,将闭包中的变量等值放在其中,不会随着函数的执行完毕而消失。
name='老男孩'
def wraaper2(n):
def inner():
print(n)
inner()
print(inner.__closure__)
wraaper2(name) 执行结果:
老男孩
(<cell at 0x0000007DC1777228: str object at 0x0000007DC1773260>,)
Python基础—名称空间(Day10)的更多相关文章
- python函数名称空间
一.命名空间概念 命名空间(name space),若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方.命名空间分三种: locals:函数内的名称空间,包括局部变量和形参 gl ...
- Python 的名称空间和作用域
最开始对名称空间的了解是在学习函数的时候,那时候知道了作用域的查找顺序,以及全局名称空间和局部名称空间,产生疑惑的时候为学递归的时候,那时候还没有名称空间这个概念,只知道递归有个最大深度,那时候以后递 ...
- python之名称空间
1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类的数据属性是共享给所有对象 print(id(g1.c ...
- Python(名称空间、函数嵌套、函数对象)
一.名称空间: 名称空间 定义:存放名字和值的绑定关系 内置名称空间 python自带的名字,如print.int.str 解释器启动就会生效 全局名称空间 文件级别定义的名字,都会放 ...
- python函数名称空间与作用域、闭包
一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...
- python函数----名称空间和作用域
一 名称空间 名称空间即存放名字与对象映射/绑定关系的地方. 对于x=3,Python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x表示清除该绑定关系. 在程序执行 ...
- python之名称空间与函数对象
目录 名称空间 内置名称空间 全局名称空间 局部名称空间 名称的查找顺序 作用域 global关键字 nonlocal关键字 函数名的多种用法 函数的嵌套 名称空间 名称空间就是变量名与变量值绑定关系 ...
- Python 名称空间与作用域、闭包与装饰器
Python 的名称 Python 的名称(Name)是对象的一个标识(Identifier).我们知道,在 Python 里面一切皆对象,名称就是用来引用对象的.说得有点玄乎,我们以例子说明. 例如 ...
- python名称空间介绍
python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...
随机推荐
- Word2010制作日历
原文: https://www.toutiao.com/i6494876164157342222/ 最终效果: 设置页面纸张为"横向". 选择"页面布局"选项卡 ...
- 【Java】泛型
文章目录 泛型 为什么要有泛型 在集合中使用泛型 如何自定义泛型结构 自定义泛型类.接口 泛型方法 泛型在继承方面的体现 通配符的使用 有限制条件的通配符的使用 泛型 为什么要有泛型 集合容器类在设计 ...
- CUDA 入门(转)
CUDA(Compute Unified Device Architecture)的中文全称为计算统一设备架构.做图像视觉领域的同学多多少少都会接触到CUDA,毕竟要做性能速度优化,CUDA是个很重要 ...
- Linux下Redis 6.2.6安装和部署详细图文步骤
Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的 ...
- 【刷题-LeetCode】264. Ugly Number II
Ugly Number II Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose ...
- Spring boot + Vue axios 文件下载
后端代码: @GetMapping("/{sn}") @ApiOperation(value = "获取文件",notes = "获取文件" ...
- 1.IO流
1.组成部分 File.FileInputStream.FileOutStream.FileWriter.FileReader 2.File pathSeparatorChar ; separator ...
- java基础编程练习题
1.題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1 2 3 4 5 6 7 1 1 2 3 ...
- 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录
目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 StdPeriphLi ...
- 学习JAVAWEB第十天
今天内容: 运行servlet到崩溃,一直是404 明天继续运行