函数变量作用域
变量作用域:
变量的作用域相当于变量的命名空间,赋值过的变量并不是在哪里都可以使用的。如何定义变量决定了变量可以在哪里被使用python中变量赋值的位置决定了哪些范围的对象可以访问这个变量,该范围也就是作用域。
分为局部变量和全局变量
局部变量:
在函数内赋值的变量,不做特殊说明声明的就是局部变量。作用域是局部的,只能在当前函数使用
Def foo():
X = “hello”
Print(x)
Foo()
Print(x)#错误
>>hello
>>nameError:name’x’ is not defined
在函数体内的print(x)成功执行,但是函数体外的“print(x)”执行失败,即错误信息:”x”没有被定义。
Def foo(x):
Print(x)
Foo(“hello”)
Print(x)
>>hello
>>nameError:name’x’ is not defined
同样的结果,函数体内的“print(x)”成功执行,函数外的“print(x)”执行失败,并且受到错误信息:“x”没有定义。
全局变量:
在函数外定义的变量就是全局变量,作用域是整个程序范围
函数体内的重新赋值的相同函数名字变量并不会改变函数体外的全局变量
X = “函数体外”
Def foo():
X = “函数体外”
Print(x)
Foo()
Print(x)
>>函数体内
>>函数体外
函数foo对“x”进行复制操作时并没有改变函数体外的“x”变量。也就可以说是函数内实际就是创建了一个新的变量,只是名字同函数外“x”变量相同,但并不会改变函数外的“x”。
X = “函数体外”
Def foo():
Global x
X = “函数体内”
Print(x)
Foo()
Print(x)
>>函数体内
>>函数体内
从执行结果可以发现,函数体内修改全局变量“x”为“函数体内”,函数体外的全局变量“x”也变成了“函数体内”。“global”可以在函数体内修改全局变量。