zoukankan      html  css  js  c++  java
  • python(一):作用域

    与c相比,python作用域很奇特。

     在Python中变量的作用域是由它在源代码中的位置决定的,这一点与c相似。

    python只支持4种作用域,即局部作用域,全局作用域,内置作用域,嵌套作用域。

    比较下列两段代码:

    >>>x = 10
    >>>def selector():
                print x
    >>>selector()
        

    输出10,由于在函数局部作用域中没有赋值,x向上绑定到全局作用域中的x。

    >>>x = 10
    >>>def selector():
                print x
                x = 11
    >>>selector()

    抛出NameError异常,由于x = 11使得x绑定到局部作用域上,在print x时却没有绑定,因此出现异常。

    不恰当的修正,显示的将x绑定到全局作用域上,采用global关键字

    >>>x = 10
    >>>def selector():
                global x
                print x
                x = 11
    >>>selector()        

    原理性解释:LEGB规则

    L(local)->E(embedded)->G(global)->B(build-in)

    其中,局部作用域指示当前函数的定义范围

    嵌套作用域指示当前函数的外层函数的定义范围

    全局作用域通常只当前模块的范围

    内置作用域通常指内置空间的范围,如__main__等

    虽然python为动态语言,但是变量的作用域在编译期确定,当某个变量在某级作用域中发生赋值过程,则这个变量的作用域便由此确定

  • 相关阅读:
    shell脚本基础
    rtsp冷门解释
    C++基础之动态内存
    树莓派3安装ros
    Trie树
    [LeetCode]The Skyline Problem
    [LeetCode]Implement Trie (Prefix Tree)
    C++基础之适配器
    配置树莓派3的openwrt中的网络
    [LeetCode]Self Crossing
  • 原文地址:https://www.cnblogs.com/zjgtan/p/3396907.html
Copyright © 2011-2022 走看看