名称空间与作用域 闭包函数

一、什么是名称空间?

1.名称空间:存放名字的地方,有三种名称空间(之前遗留的问题:  例如:  x=1,1存在与内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方)

2.名称空间分为三大类:

  内置名称空间:存放的是python解释器自带的名字

      生产:python解释器的启动则产生

      销毁:python解释器关闭则销毁

  全局名称空间:在顶级定义的名字

x=1

if True:

  y=2

while True:

  while True:

    while True:

      z=3

def func():

  pass

      产生:执行python程序时产生

      销毁:python程序执行完毕后则销毁

 

局部名称空间:在函数内定义的名字

def foo():

  m=100

foo()

  产生:在函数调用时临时产生

  销毁:在函数diadiaoyo调用后则销毁

 

三种名称空间的产生的先后顺序:内置=》全局=》局部

查找名字的顺序:从当前位置往外一层一层的查找

  如果当前在局部名称空间:局部=》全局=》内置

  如果当前在全局名称空间: 全局=》内置

 1 # len=111
 2 # def foo():
 3 #     # len=222
 4 #     print(len)
 5 # len=111
 6 # foo()
 7 
 8 
 9 # x=0
10 def f1():
11     # x=1
12     def f2():
13         # x=2
14         def f3():
15             # x=3
16             print(x)
17         f3()
18     f2()
19 f1()
20 
21 
22 def foo1():
23     def foo2():
24         def foo3():
25             print(x)

 

**************************************************************************************************  

作用域即范围

  全局范围(内置名称空间与全局名称空间属于该范围); 全局存活,全局有效

  局部范围(局部名称空间属于该范围);临时存活,局部有效

2.作用域关系是在函数定义阶段就已经国定的,与函数的调用位置无关,如下:

 1 x=1
 2 def f1():
 3     def f2():
 4         print(x)
 5     return f2
 6 x=100
 7 def f3(func):
 8     x=2
 9     func()
10 x=10000
11 f3(f1())

 

3.查看作用域:globals(),locals()

LEGB代表名字查找顺序:locals=》enclosing   function  =>globals=>_builtins_

locals是函数内名字空间,包括局部变量和形参

enclosing 为外部嵌套函数的名字空间(闭包中常见)

globals  全局变量,函数定义所在模块的名字空间

builtins 内置模块的名字空间

转载于:https://www.cnblogs.com/frank007/p/9707380.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值