python-函数 命名空间,顺序,作用域,变量和关键字

目录

 

1.命名空间

(1)局部命名空间

(2)全局命名空间

(3)内置命名空间

2.命名空间的查找和加载顺序

(1)命名空间的加载顺序

(2)命名空间的查找顺序

3.作用域

4.全局变量和局部变量

(1).复习可变数据类型和不可变数据类型

(2)全局变量和局部变量的使用

5.global和nonlocal关键字


这一节都是一些概念。

1.命名空间

Python的命名空间的本质是一个字典,用来记录变量名称和值。字典的key是变量的名称,字典的value对于的是变量的值。

 

重点:

局部名称空间使用 locals() 函数来访问

全局命名空间的访问使用globals()函数访问。

 

(1)局部命名空间

每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数的参数 和局部定义的变量

local(‘当前的’)     

在函数体内,当我们定义局部命名空间,输出只会输出函数体内的变量

(2)全局命名空间

每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、 类、其它导入的模块。

当我们在函数体的外部定义全局变量时,获取的是除函数内部变量所有的变量。

(3)内置命名空间

内置名称空间:

任何模块均可访问它,它存放着内置的函数和异常。

内置的函数:如print、abs(绝对值)等,python自带的。

2.命名空间的查找和加载顺序

(1)命名空间的加载顺序

内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)当函数返回结果 或 抛出异常时,被删除。每一个递归调用的函数都拥有自己的命名空间

上面说了一大堆,实际上只需要知道:

内置命名空间(函数自带,肯定优先)——》全局———》局部(从大范围到小范围的过程)

(2)命名空间的查找顺序

当使用某个变量的时候,先从局部命名空间中找,如果能找到则停止搜索,如果找不到在去全局名称空间中查找,如果找到则停止搜索,如果找不到则到内置名称空间中查找,如果找不到则报错。

和加载顺序正好相反!!!!

只需要记住:

如果查找一个变量时:

从变量本身在的局部命名空间——》全局命名空间——》内置名称空间(范围有小到大)

(不会在比它范围更加小的局部命名空间查找)

在嵌套函数中的情况:

     1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜索

     2、然后是在父函数的命名空间中搜索

     3、接着是模块命名空间中搜索

     4、最后在内置命名空间中搜索

 

 

 

3.作用域

作用域是变量在程序中的可应用范围。

分为4种:

查找过程参考2,所以就是从局部到全局,再到内建

 

4.全局变量和局部变量

重点:

在函数中定义的变量称为局部变量,只在函数内部生效,

在程序一开始定义的变量称为全局变量,全局变量的作用域是整个程序

下图中,全局变量在函数外面,而局部变量在函数体内部

在开始这一节的时候,

首先我们需要复习下那些基础数据

(1).复习可变数据类型和不可变数据类型

 

可变数据类型:列表,字典

不可变数据类型:整型,浮点型,字符串,元组等

(2)全局变量和局部变量的使用

1.全局变量是不可变数据类型,函数无法修改全局变量的值

 

打出来依旧是10,因为是不可变数据变量
2.全局变量是可变数据类型,函数可以修改全局变量的值

5.global和nonlocal关键字

  1. global关键字可以将局部变量变成一个全局变量。

由上可知他们的区别,把局部作用域变成了全局作用域

nonlocal关键字可以修改外层(非全局)变量。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值