美文网首页
函数 -- 变量作用域

函数 -- 变量作用域

作者: __深蓝__ | 来源:发表于2019-01-07 15:51 被阅读0次
  • Python程序中,变量并不是在任何位置都可以访问,访问权限取决于变量在哪里赋值。
  • 变量作用域决定了什么位置可以访问什么变量。
  • 作用域一共有4种,分别是:
    • L (Local) 局部作用域
    • E (Enclosing) 闭包函数外的函数中
    • G (Global) 全局作用域
    • B (Built-in) 内建作用域
  • L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
x = int(2.9)         # 内建作用域
 
g_count = 0          # 全局作用域
def outer():
    o_count = 1      # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域
  • 模块(module)类(class)函数(def、lambda)会引入新作用域
  • if/elif/elsetry/exceptfor/while语句不会引入新作用域
  • 没有引入新作用域的变量,作用域外部也可以访问
  • 引入新作用域
>>> def test():
...     msg_inner = 'I am from Neuedu'
... 
>>> msg_inner  # 外部无法访问
NameError: name 'msg_inner' is not defined
  • 没有引入新作用域
>>> if True:
...  msg = 'I am from Neuedu'
... 
>>> msg  # 外部可以访问
'I am from Neuedu'
>>> 
局部变量和全局变量
  • 局部变量是在函数内部定义的变量,只能在函数内部使用,在函数执行时被创建,执行结束后被系统回收
  • 全局变量是在函数外部定义的变量,所有函数内部都可以使用,但是不允许直接修改全局变量的值
total = 0   # 这是一个全局变量
def sum( arg1, arg2 ):
    total = arg1 + arg2      # total是局部变量.
    print ("函数内是局部变量 : ", total)
    return total

sum( 10, 20 )
print ("函数外是全局变量 : ", total)


函数内是局部变量 :  30
函数外是全局变量 :  0
global 和 nonlocal关键字

内部作用域修改外部作用域变量时,使用global关键字

num = 1
def fun1():
    global num    # 使用global关键字声明这是全局变量
    print(num) 
    num = 123
    print(num)

fun1()
print(num)


1
123
123

修改嵌套作用域中,外层非全局作用域的变量时,使用 nonlocal 关键字

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

100
100
  • 为了保证所有的函数都能正确使用全局变量,应该将其定义在所有函数上方
  • 全局变量名前应该增加 g_ 或者 gl_ 的前缀




- end -

相关文章

  • Scope

    1. 全局作用域 全局变量拥有全局作用域 2. 函数作用域 在函数内声明的变量用于函数作用域。在函数体内,局部变量...

  • Python函数复习

    本章重点: 掌握函数参数传递 变量的作用域 lambda函数 函数定义: 一、变量的作用域 作用域顾名思义是指变量...

  • 函数作用域&&作用域链

    注意:函数作用域和变量作用域并不是一个概念,在学习函数作用域时可以先暂时忘记变量作用域的概念。 怎么理解函数作用域...

  • JavaScript 作用域和闭包理解

    作用域: 分为函数作用域,和块级作用域; 函数作用域 函数作用域外面的无法访问函数作用域内部的变量和函数,这样就可...

  • 闭包的实现原理

    作用域和作用域链 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 全局变量 变量在函数外定...

  • JavaScript作用域、作用域链

    作用域 变量或函数可以发生作用的区域即是作用域。 作用域的最大用途就是隔离变量或函数,并控制变量或函数的生命周期,...

  • JS高级知识点汇总

    1.作用域 局部作用域:函数内部就是局部作用域。 ①在局部作用域申明的变量称为局部变量,局部变量只能在当前函数内部...

  • JS作用域链

    作用域 变量的作用域 变量的作用域有两种:全局变量和局部变量。 全局作用域: 最外层函数定义的变量拥有全局作用域,...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 作用域链

    作用域 变量或函数可以发生作用的区域即是作用域。作用域的最大用途就是隔离变量或函数,并控制变量或函数的生命周期,超...

网友评论

      本文标题:函数 -- 变量作用域

      本文链接:https://www.haomeiwen.com/subject/qbbqrqtx.html