Python中的函数作用域


本文摘自php中文网,作者不言,侵删。

这篇文章主要介绍了关于Python中的函数作用域,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

在python中,一个函数就是一个作用域。这篇文章重点给大家介绍python中的函数作用域,感兴趣的朋友一起看看吧

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

1

2

3

4

5

6

name = 'xiaoyafei'

def change_name():

  name = '肖亚飞'

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

change_name() # 调用函数

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

运行结果如下:

在change_name里的name: 肖亚飞
在外面的name: xiaoyafei

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

1

2

3

4

5

6

7

8

9

10

11

12

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()

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

1

2

3

4

5

6

7

8

9

10

11

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绑定关系的地方

1

2

3

>>> x = 1

>>> id(1)

1576430608

名称空间分为以下3种:

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

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

  • builtins: 内置模块的名字空间

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

作用域即范围

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

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

让我们来举例看一下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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中的函数作用域的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

win10自带Python

如何将字符串转成字典

交叉验证以及Python代码实现

Python 绘图库 matplotlib 入门教程_Python

Python怎么生成时间戳

Python中fd()是什么

Python取余运算符是什么

人生苦短,学习Python

Python如何计算1到100的和

Python requests快速入门介绍

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...