说说 Python 的做用域

在函数内定义的变量,在函数的 “局部做用域” 中;而在函数外定义的变量,在 “全局做用域” 中。bash

在程序启动时,会建立一个全局做用域。当程序终止时,就会销毁这个做用域,其内部保存的变量也会被一同销毁。函数

一个函数被调用时,会建立一个局部做用域。当这个函数返回时,这个做用域就会被销毁。ui

1 全局做用域内,不能使用局部变量

全局做用域内若是使用了局部变量,就会抛错:spa

def cook():
    dumplings = 3


cook()

print(dumplings)
复制代码

运行结果:code

NameError: name 'dumplings' is not definedcdn

由于 cook() 返回后,其局部做用域中的 dumplings 变量也被一同销毁了,因此在全局做用域内没法访问。blog

2 局部做用域内,不能使用其它局部做用域内的变量

def dumpling():
    dumplings = 5
    print('dumpling()=' + str(dumplings))


def cook():
    dumplings = 3
    dumpling()
    print('cook()=' + str(dumplings))


cook()
复制代码

运行结果:作用域

dumpling()=5 cook()=3string

cook() 中调用了 dumpling(),所以其同名的 dumplings 变量被从新定义了。也就是说,一个函数内定义的局部变量与其它函数内部定义的变量,是彻底隔离的。it

另外,这个示例也说明了:不一样做用域中的变量,能够同名。但不建议这样作,由于变量名相同,咱们很差跟踪代码。

3 局部做用域内,可使用全局变量

def cook2():
    print(dumplings)

dumplings = 3
cook2()
复制代码

运行结果:

3


总的来讲,做用域与变量遵照如下规则:

  1. 全局做用域中的代码,没法使用局部做用域中定义的变量。
  2. 局部做用域可使用局部做用域中的定义的变量。
  3. 一个函数局部做用域中,没法使用其它局部做用域中的变量。
  4. 变量若是分别定义在不一样的做用域中,那么能够同名(不建议这样作)。
相关文章
相关标签/搜索