最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python中的函数作用域

来源:动视网 责编:小采 时间:2020-11-27 14:21:42
文档

Python中的函数作用域

Python中的函数作用域:这篇文章主要介绍了关于Python中的函数作用域,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下在python中,一个函数就是一个作用域。这篇文章重点给大家介绍python中的函数作用域,感兴趣的朋友一起看看吧在python中,一个函数就是一个作用域
推荐度:
导读Python中的函数作用域:这篇文章主要介绍了关于Python中的函数作用域,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下在python中,一个函数就是一个作用域。这篇文章重点给大家介绍python中的函数作用域,感兴趣的朋友一起看看吧在python中,一个函数就是一个作用域


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

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

    名称空间分为以下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中的函数作用域,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下在python中,一个函数就是一个作用域。这篇文章重点给大家介绍python中的函数作用域,感兴趣的朋友一起看看吧在python中,一个函数就是一个作用域
    推荐度:
    标签: 中的 里的 函数
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top