简单定义:
所谓定义域,在数学中就是自变量的‘取值范围’,或者说是‘定义范围’,而在程序中,就是一个变量的作用范围。
也就是说,一个变量的定义域如果是全局,它就能在全局的任何一个地方发挥作用,如果是某个函数,那你如果离开了函数就用不了了。
number = 1 #全局变量
def test(): #局部变量定义
number_1 = 5
print(number_1)
print(number) #在函数中引用全局变量
print(number)
test() #函数的引用
结果是:
1
5
1
如果说我们在最后再加上一个print(number_1),那么一定会报错,因为在函数外,我们没有进行变量'number_1'的定义。
分类:
函数的定义域有四种,它们的按作用范围大小,从大到小排列:
Python内置作用域 > 当前模块中的全局 > 外层作用域 > 局部作用域
这里的Python内置作用域就是Python的一些内置函数,比如说print()等等,我们没有在py文件中进行这个函数的定义,但是我们却可以直接使用。
外层作用域则是在函数嵌套的时候,在最小作用域之外的作用域。
注意事项:
1. 我们可以在函数中重新定义全局变量,但是并不影响全局变量的数值,举个栗子:
number = 1 #全局变量
def test():
number = 2 #局部变量定义
print(number)
print(number)
test() #引用函数
print(number) #检验number的值是否改变
结果是:
1
2
1
2. 我们在不使用关键字的时候,不能在局部修改全局变量,因为函数在定义的时候已经压入内存,如果你在局部中修改,则会提示你让你在此变量之前定义变量,比如这样:
def test2():
number = number + 1
print(number)
test2()
会有如下错误:
local variable 'number' referenced before assignment
大家应该看到我上面的那一段话有一个前提“在不使用关键字的时候”,那么如果使用了关键字了呢?关键字是什么呢?
是global,全球的意思,这个关键字是把局部变量看做全局变量,因此我们可以修改变量,那么让我们梅开二度:
def test2():
global number
number = number + 1
print(number)
test2()
这样就能运行了~~