在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中的函数作用域,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2018-05-07

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

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

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

  2. python函数中变量的作用域_Python中变量的作用域(variable scope)

    此文目的 此文主要讨论和总结一下,Python中的变量的作用域(variable scope). 目的在于,通过代码,图解,文字描述,使得更加透彻的了解,Python中的变量的作用域: 以避免,在写代 ...

  3. python内置函数用来返回数值型序列中所有元素之和_Python内置函数______用来返回数值型序列中所有元素之和...

    [填空题]表达式 int(4**0.5) 的值为 [判断题]3+4j不是合法的Python表达式. [填空题]已知列表对象x = ['11', '2', '3'],则表达式 max(x) 的值为 [填 ...

  4. python中的方法和函数的区别_python中函数与方法的区别?

    Python中函数不是方法,主要有以下区别: 首先,从分类的角度来分析二者的区别 (1)函数的分类: 内置函数:python内嵌的一些函数. 匿名函数:一行代码实现一个函数功能. 递归函数:自己调用自 ...

  5. python函数返回值_Python中函数的返回值示例浅析

    前言: 前面我们介绍了简单的介绍了函数和函数的参数,今天我们来说一下Python中函数的返回值. 函数的返回值:函数运算的结果,需要进一步的操作时,给一个返回值return用来返回函数的结果,如果没有 ...

  6. python内置作用域_python中的作用域

    python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: G:glo ...

  7. python代码解释4个作用域_Python中作用域的深入讲解

    前言 作用域是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围. python的变量作用域的规则非常简单,可以说是所有语言中最直观.最容易理解的作用域. 在开始介绍作用域之前,先抛一个 ...

  8. python内置函数可以返回序列中的最大元素_Python内置函数__用来返回序列中的最小元素...

    [判断题]不可以在同一台计算机上安装多个Python版本. [判断题]Python是一种跨平台.开源.免费的高级动态编程语言. [填空题]假设列表对象aList的值为[3, 4, 5, 6, 7, 9 ...

  9. python匿名函数的作用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

最新文章

  1. springboot动态数据源切换(多数据源配置)
  2. kernel并发控制:自旋锁、互斥体、中断屏蔽
  3. jzoj5363-[NOIP2017提高A组模拟9.14]生命之树【启发式合并,Trie】
  4. 苹果wifi网速慢怎么办_所以,WiFi和4G到底哪个更耗电?
  5. linux磁盘fio压力测试,fio进行磁盘压力测试
  6. 信息学奥赛一本通(1206:放苹果)
  7. 生成用于ASP.NET Web API的TypeScript客户端API
  8. 还原二叉树--根据后序中序输出先序
  9. 嵌入式Linux编程--我的第一次艰难跋涉
  10. 阿里云实现首个云上量子加密通讯服务
  11. 【数字信号去噪】基于matlab小波变换地震波去噪【含Matlab源码 1954期】
  12. 1191 家谱树(拓扑排序)
  13. 魔兽世界用宏显示服务器时间,网上找的宏用后不能显示冷却时间为什么啊法师 – 手机爱问...
  14. 微信小程序使用scss,gulp
  15. 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。
  16. java 微秒 时间_Java中时间的计算 年月日小时分钟秒毫秒微秒
  17. 方案详解|AARRR+八角行为分析=用游戏化思维实现用户增长
  18. 把踢毽子的寒冷过程和心理描写出来
  19. Mathematica求解方程——Solve、Reduce、NSolve等函数
  20. cmd无法识别pip命令的问题(Python)

热门文章

  1. 小米云能同步到华为手机上吗_有没有小米还没涉足的产业?对标百度网盘,小米云盘即将上线...
  2. R语言使用aov函数进行单因素协方差分析(One-way ANCOVA)、单因素协方差分析(ANCOVA)扩展了单因素方差分析,包括一个或多个协变量(covariates)
  3. R语言ggplot2可视化、不同分组使用不同的色彩、同一分组(group)的线条使用相同的色彩但是配置使用不同的线型(line type)
  4. Error in apply(df$var1, 2, mean) : dim(X) must have a positive length
  5. R语言使用lm构建线性回归模型、并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型预测中系统误差的一个例子 、自定义函数计算R方指标和均方根误差RMSE
  6. R语言使用ggplot2包的快速可视化函数qplot绘制分组散点图(添加平滑曲线与标准差带)实战
  7. python使用imbalanced-learn的SMOTEENN方法同时进行上采样和下采样处理数据不平衡问题
  8. python代码实现二叉树的分层打印
  9. 便携式不锈钢管道焊接机器人_304不锈钢管居然可以发黑!?
  10. python 字典 转 pandas DataFrame