在函数内定义的变量,在函数的 “局部做用域” 中;而在函数外定义的变量,在 “全局做用域” 中。bash
在程序启动时,会建立一个全局做用域。当程序终止时,就会销毁这个做用域,其内部保存的变量也会被一同销毁。函数
一个函数被调用时,会建立一个局部做用域。当这个函数返回时,这个做用域就会被销毁。ui
全局做用域内若是使用了局部变量,就会抛错:spa
def cook():
dumplings = 3
cook()
print(dumplings)
复制代码
运行结果:code
NameError: name 'dumplings' is not definedcdn
由于 cook() 返回后,其局部做用域中的 dumplings 变量也被一同销毁了,因此在全局做用域内没法访问。blog
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
另外,这个示例也说明了:不一样做用域中的变量,能够同名。但不建议这样作,由于变量名相同,咱们很差跟踪代码。
def cook2():
print(dumplings)
dumplings = 3
cook2()
复制代码
运行结果:
3
总的来讲,做用域与变量遵照如下规则: