Python名称空间和作用域

一、函数的名称空间

首先我们需要了解堆区和栈区的区别
栈区的在内存分区中会通过编译器进行释放,堆区的内存地址只能手动去分配和释放。
名称空间只是对栈区的分区也就是划分栈区里的领地。这块是内置的这块是全局的这块是局部的。
名称空间是彼此独立开的,不存在包含关系。

名称空间是什么 ?
在Python中,命名空间是一个存储变量、函数和类名的容器,它们用于区分不同的变量、函数和类。每个命名空间都有一个唯一的名称,它由Python解释器自动分配

1、内置名称空间
伴随python解释器的启动/关闭而产生/回收,因而是第一个被加载的名称空间,用来存放一些内置的名字,比如内建函数名

max
<built-in function max> #built-in内置的意思
 min
<built-in function min>

2、全局名称空间
存放的名字:只要非内置,非函数内定义的名字称之为全局名称空间名字。
存活周期:python文件执行则产生,python文件运行完毕后销毁

3、局部名称空间
存放的名字:在调用函数时,运行函数代码过程中产生的函数体内名字
存活周期:调用函数时存活,调用结束后销毁

4、名称空间的加载顺序是什么样的
内置 >>> 全局 >>> 局部

5、销毁顺序
局部 >>> 全局 >>> 内置

6、名称空间查找优先级:当前所在位置向上查找一层一层查找
当前位置在局部, 局部 > 全局 > 内置

input=333
def dls():
    input = 444
    print(input)
dls()

当前在全局, 全局 > 内置 找不到就报错。

input=333
def dls():
    input = 444

dls()
print(input)

7、天坑实例 :我们肯定以为这样会报错,然而并没有返回的是111.因为从来没有人定义说从局部到全局非要遵循向上查找的原则。我们可以理解为局部到全局查到是个圆形的查到。

def dls():
    print(x)


x = 111 #全局已经被定义了。
dls()

8、地坑实例:名称空间的”嵌套“以定义阶段为准和调用无关

x = 1  # 已经定义好了。所以不会等于22
def dls():
    print(x)
def lls():
    x=22
    dls()
lls()

9、神坑实例:变量一定要先定义后引用,不然报错

x=111
def dun():
    print(x)
    x = 222
dun()

二、函数的作用域
作用域指的是作用范围

1、全局作用域 :内置名称空间和全局名称空间、全局存活、全局有效:被所有函数共享

x=1
def dls():
    print(x)
def lls():
    print(x)
dls()
lls()

2、局部作用域:局部名称空间、临时存活、局部有效:函数内有效

def dls(x):
    def lls():
        def tls():
            print(x)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值