概念
全局变量:定义在函数外部的变量,可在函数外部和函数内部使用
局部变量:定义在函数内部的变量,只能在函数内部使用
注意:如果局部变量和全局变量同名,会在函数内部又定义一个新的局部变量, 例如以下:
name = 'zhangsan'
def foo():
name = 'lisi'
print('函数内部的name: %s' % name)
foo()
print('函数外部的name: %s' % name)
global关键字的使用
当我们需要在函数内部改变全局变量的值时,需要用 global 关键对全局变量进行声明,否则无法直接修改局部变量的值
name = 'zhangsan'
def foo():
global name
name = 'wangwu'
foo()
print('函数外部的name: %s' % name)
但是对于 列表,字典等可变数据类型更改元素的值,不须用global声明
name = ['zhangsan']
dict = {'name': 'lisi', 'age': 15}
def foo():
name[0] = 'wangwu'
dict['age'] = 18
foo()
print('函数外部的name: %s' % name)
print('函数外部的dict: %s' % dict)
globals()和locals内置函数
globals():以字典类型返回当前位置的全部全局变量。globals()返回的是全局变量的字典,修改其中的内容,值会真正的发生改变。
locals():会以字典类型返回当前位置的全部局部变量。locals() 返回是当前局部变量的深拷贝,修改locals() 中变量值的时候,实际上对于原变量本身是没有任何影响的
name = ['zhangsan']
dict = {'name': 'lisi', 'age': 15}
def foo():
name[0] = 'wangwu'
dict['age'] = 18
x = 0
print('局部变量:{}'.format(locals()))
foo()
print('全局变量:{}'.format(globals()))
age = 18 # 此处的全局变量不会被打印出来