先接触Java或者其他语言的程序员,如果刚接触Python的话,需要对Python的变量作用域特别了解下,可能对Python里的变量作用域有点不是很理解,比如如下的程序,如果用Java的思维来看,我也以为会输出x=20
x = 50 def func1(): x = 20 func1() print(x) #x=50还是x=20?
局部变量
在函数定义中声明的变量,他们与在函数外使用的其它同名变量没有任何关系,即变量名称对函数来说是局部的。
类似函数def的还有class、lambda等语句也产生局部变量作用域
但是if、try、for等语句并不会产生新的作用域,换句话说就是if,try,for等语句里面定义的变量并不会随着该语句执行结束而回收,而是可以到处引用的,if,try,for等语句内变量作用域实际范围受其所在 的def,class,lambda范围约束。
x = 50 #全局变量 def func1(): x = 20 #def内局部变量的名字和全局变量名字相同,但互不影响 print '局部变量x: ', x func1() print '全局变量x: ', x # 结果如下, 函数内的赋值并没有影响到函数外 x 的值 局部变量x: 20 全局变量x: 50
全局声明
如果想在函数内改变某一个全局变量,那必须使用global
语句。
x = 50 # 全局变量 def func1(): global x #定义全局变量 x = 20 #定义后的 x 变量可以在全局范围内更改 print '函数内变量x: ', x func1() print '全局变量x: ', x # 结果,函数内的赋值更改了函数外 x 的值 局部变量x: 20 全局变量x: 20
文章评论