在python中,一个函数就是一个作用域

name = 'xiaoyafei'

def change_name():

name = '肖亚飞'

print('在change_name里的name:',name)

change_name() # 调用函数

print("在外面的name:",name)

运行结果如下:

在change_name里的name: 肖亚飞

在外面的name: xiaoyafei

我们再试一下在嵌套函数中是如何的寻找的?

age = 15

def func():

print('第一层age:',age) # 第一层age: 15

def func2():

age = 73

print("func2中的age:",age) # func2中的age: 73

def func3():

age = 84

print("func3中的age:",age) # func3中的age: 84

func3() # 调用func3函数

func2() # 调用func2函数

func()

在以上嵌套函数中,就能够很好的说明一个函数就是一个作用域,那么我们现在稍微改一下代码看看情况?

age = 15

def func():

print('第一层age:',age) # 第一层age: 15

def func2():

print("func2中的age:",age) # func2中的age: 15 # 看到没有,如果当前作用域里没有age变量,那么它就会往上找

def func3():

age = 84

print("func3中的age:",age) # func3中的age: 84

func3() # 调用func3函数

func2() # 调用func2函数

func()

那么,这时候有人就说了,屁话一大堆讲的原来是局部变量和全局变量,那么我想问:在上面这个嵌套函数中,func2中并没有age变量,那么它是如何找到全局变量age = 15的?

此时我们就需要来看一下作用域的查找顺序了:

变量作用域LEGB

L:locals 函数内的名称空间,包括局部变量和实参

E:enclosing 外部嵌套函数的名称空间,即相邻的上一层,打个比方说:func2中没有age变量则会去func里找这个

G:globals 全局变量

B:builtins 内置模块的名称空间

咳咳,还是先了解下什么是名称空间把?

名称空间,又名 name space ,顾名思义就是存放名字的地方,存什么名字呢?举例说明,x = 1 ,1存放在内存当中,那么变量名x存放在哪里呢? 名称空间就是存放名字x与1绑定关系的地方

>>> x = 1

>>> id(1)

1576430608

名称空间分为以下3种:

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

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

builtins: 内置模块的名字空间

不同变量的作用域不同就是有这个变量所在的命名空间决定的.

作用域即范围

全局范围:全局存活,全局有效

局部范围:临时存货,局部有效

让我们来举例看一下

level = 'L0'

n = 22

def func():

level = 'L1'

n = 33

print(locals()) # {'n': 33, 'level': 'L1'} 在之前说过在python中,一个函数就是一个作用域,这就很完美的体现了

def outer():

n = 44

level = 'L2'

print(locals(),n) # {'level': 'L2', 'n': 44} 44

def inner():

level = 'L3'

print(locals(),n) # {'level': 'L3', 'n': 44} 44

inner()

outer()

func()

以 L --> E --> G -->B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置函数中找。

总结

以上所述是小编给大家介绍的python中的函数作用域,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对聚米学院网站的支持!

python中函数作用域_Python中的函数作用域相关推荐

  1. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  2. python中定义数据结构_Python中的数据结构—简介

    python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...

  3. python中函数的作用域_Python中的函数作用域

    在python中,一个函数就是一个作用域 name = 'xiaoyafei' def change_name(): name = '肖亚飞' print('在change_name里的name:', ...

  4. python中read函数解释_Python内置函数解释教程,readwill(非常详细的代码演示截图),详解,看,了,就,会,很...

    内置函数 abs() 获取绝对值 all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False any() 接受一个迭代器,如果迭代器里有一个元素为真,那么返回True ...

  5. python函数中的变量_Python中的函数与变量

    本节内容 函数的定义方法 函数功能 函数的返回值 函数的形参与实参 全局变量与局部变量 递归 函数的作用域 匿名函数lambda 函数式编程 常用内置函数 其他内置函数 函数 函数的定义方法 函数就相 ...

  6. python中的open函数实例_Python中open函数注意点

    前段日子看了关于Python文件和流的一些文献,其中最基础的便是python的一个内建函数:open!!! 很简单的一个函数,他的原型是这样的: open(name,[,mode[,buffering ...

  7. python中round函数参数_python中关于round函数的小坑

    round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10.0/3, 2) 3.33 >>> round(20/7) 3 第一个参数是 ...

  8. python format函数实例_python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下 ...

  9. python中的array函数作用_Python中的Array | 数组2(简介和功能)

    相关文章:Python中的数组Array | 1(简介和功能) 以下是更多函数. 1. typecode:此函数返回初始化数组所用的数据类型. 2. itemsize:此函数返回单个数组元素的大小(以 ...

最新文章

  1. 搞懂这些框架源码,带你吊打面试官
  2. 工厂三兄弟之工厂方法模式
  3. setTimeout详解
  4. 【翻译】eXpressAppFramework QuickStart 业务模型设计(十)——在代码中实现数据验证...
  5. setState是异步还是同步?
  6. Windows驱动程序调用约定
  7. 【飞秋】做需求分析一点心得
  8. 服务器返回它们的和_无服务器有其陷阱。 这是避免它们的方法。
  9. SLAM Cartographer(18)后端优化问题求解器
  10. Web 项目中,MySQL 最新驱动下载、及配置
  11. linux安装远程桌面管理工具xrdp
  12. minecraft java文件夹_Minecraft游戏下载 文件结构说明
  13. python统计pdf字数_Python统计字数的思路详解
  14. win10联想Y7000重启蓝牙消失报显卡错误代码43
  15. 浅谈怎样入侵服务器,仅供学习用
  16. 使用秀米编排点击展示H5
  17. 探讨下app的包为什么抓不到
  18. lm曲线公式推导_LM曲线
  19. 7PTA7-6 结伴同行去秋游
  20. 不错的讲解业务架构,应用架构,数据架构的图

热门文章

  1. 线程安全和线程不安全的简述及辅助记忆
  2. CCF 201403-5 任务调度
  3. shell中的变量与eval(转)
  4. PHP之post请求php脚本实现
  5. 用Ghost进行备份还原
  6. 设计模式之单例模式——Singleton
  7. php二维数组排序方法(array_multisort usort)
  8. flutter圆形动画菜单,Flow流式布局动画圆形菜单
  9. Mr.J-- jQuery学习笔记(七)--CSS类操作文本值操作
  10. 安装eclipse版本oxygen,及maven导入spring mvc项目并运行