zoukankan      html  css  js  c++  java
  • python中的作用域以及内置函数globals()-全局变量、locals()-局部变量

    在python中,函数会创建一个自己的作用域,也称为为命名空间。这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找。

    通过内置函数globals()返回的是python解释器能知道的变量名称的字典(变量名:值);

    而locals()函数返回的是函数内部本地作用域中的变量名称字典。由此可以看出,函数都是由自己独立的命名空间的。

    查看全局变量和局部变量:

    #coding=utf-8

    outerVar="this is a global variable"
    def test():
        innerVar="this is a local variable"
        print "local variables:"
        print locals()

    test()
    print "global variables:"
    print globals()   

    结果:

    通过全局变量,也可以知道内置属性__file__指的是当前运行的文件名称,__name__指的是__main__,也就是自己的意思

    变量相关--变量解析规则

    在python的作用域规则里面,创建变量时一定会在当前作用域里创建同样的变量,但访问或修改变量时,会在当前作用域中查找该变量,如果没找到匹配的变量,就会依次向上在闭合作用域中进行查找,所以在函数中直接访问全局变量也是可以的。

     但是变量在函数调用之前必须被声明,否则报错

     代码:

    #coding=utf-8

    outerVar = "this is a global variable"

    def test() :

      innerVar = "this is a Local variable"

      print outerVar#函数里面没有,就去外边找

      print n

    n = 10

    test()

     结果:

     

    变量相关—变量生存空间

    变量不仅仅是存在于一个个的命名空间中,它们还都有自己的生存周期,全局变量的生存周期是在整个程序执行期间有效,而局部变量的生存周期只在当前作用域中有效,一旦这个作用域不存在了,比如函数执行退出了,变量的生存周期就结束了。 外部不能使用函数的局部变量

    代码:

    #encoding=utf-8

    outerVar = "this is a global variable"

    def test() :

      innerVar = "this is a Local variable"

    test()

    print innerVar

     结果:

    innerVar变量是函数中的局部变量,所以在函数执行结束后,再去访问该变量,就会报NameError错误。

     

  • 相关阅读:
    立体视觉
    KCF中的循环矩阵
    针孔相机成像模型
    lombok-@Accessors注解
    @Value注入map、List,yaml格式
    Error:java: Compilation failed: internal java compiler error 解决办法
    Linux守护进程(init.d和xinetd)
    no server suitable for synchronization found 很简单,可以试试
    yyds什么意思?00后“行话”已经霸占网络平台了
    &>/dev/null表示的意思
  • 原文地址:https://www.cnblogs.com/xiaxiaoxu/p/9785546.html
Copyright © 2011-2022 走看看