变量
全局变量
- 在python中最上层代码块的变量
- 全部变量可以在函数内使用
局部变量
- 在函数体内定义的变量
- 不可以在除自身函数外使用
例:
# 全局变量
name = '张三'
def test():
# 局部变量
age = 11
关键字global
- 使全局变量可以在函数体内进行修改
- 仅支持字符串、数字、布尔类型、空类型
- 列表、字典和集合类型的数据无需global就可以在函数体中修改
例:
str1 = 'aa'
str2 = 'bb'
int1 = 123
int2 = 321
list1 = [1, 'a']
dict1 = {'name':'张三'}
set1 = {1, 2}
def test():
global str1
global int1
str1 = 'aaaaaaaaa' # 字符串类型,在函数中使用了global,变量改变
str2 = 'bbbbbbbbb' # 字符串类型,在函数中没有使用了global,变量不变
int1 = '111111111' # 数字类型,在函数中使用了global,变量改变
int2 = '222222222' # 数字类型,在函数中没有使用了global,变量不变
list1.append('11111') # 列表类型,无需使用global也可在函数体中修改
dict1['age'] = 10 # 字典类型,无需使用global也可在函数体中修改
set1.add('33') # 集合类型,无需使用global也可在函数体中修改
test()
print('str1是{}'.format(str1))
print('str2是{}'.format(str2))
print('int1是{}'.format(int1))
print('int2是{}'.format(int2))
print('list1是{}'.format(list1))
print('dict1是{}'.format(dict1))
print('set1是{}'.format(set1))
结果:
globals和locals
- globals():获取全局变量
- locals():获取当前作用域的数据
例:
a = 1
def t():
b = 2
print(f'函数体内:{globals()}')
print(f'函数体内:{locals()}')
# 在函数体内,globals和locals获取的是不一样的,因为当前作用域就是局部的
t()
# 在函数体外,globals和locals获取到的是一样的,因为当前作用域就是全局的
print(f'函数体外:{globals()}')
print(f'函数体外:{locals()}')
根据运行结果可以看出,在函数外2个结果是一样的,因为此时作用于全局;在函数内结果不一样,此时作用于局部
魔术变量拓展:
- name:若当前脚本作为主程序运行,则是__main__;若是当前脚本作为模块被其他脚本引用,则是当前的文件名称xx.py
- doc:当前脚本的文档说明,即第一个三引号中的内容;例如:获取某个函数的文档说明:函数名.doc