变量
全局变量:被所有代码都能访问的变量,声明在函数的外部。
局部变量:只能被当前所属函数访问的变量,声明在函数的内部。
【先声明赋值,后使用变量】
#全局变量
users = "admin"
# 普通代码中使用
print("普通代码中使用", users)
运行结果:普通代码中使用: admin
#if结构中使用
if 1:
print("if结构中使用: ", users)
运行结果:if结构中使用: admin
#循环结构中使用
while True:
print("循环结构中使用: ", users)
break
运行结果:循环结构中使用: admin
#函数中使用
def test_a():
#声明一个test_a()函数中的局部变量
phone = "HUAWEI MATE20"
print("test_a中访问test_a局部变量: ", phone)
print("test_a中访问全局变量: ", users)
test_a()
def test_b():
print("test_b中访问全局变量: ", users)
print("test_b中访问test_a局部变量: ", phone)
test_b()
运行结果:
test_a中访问test_a局部变量: HUAWEI MATE20
test_a中访问全局变量: admin
test_b中访问全局变量: admin
NameError: name ‘phone’ is not defined
全局变量的操作
name = “tom”
fav = [“lol”]
1、修改全局变量的数据:全局变量是一个字符串
注意:全局变量在普通函数中,可以访问数据,但是一般不允许直接修改数据,可以通过global关键字引入之后进行修改。
def test_str():
"""修改字符串数据"""
global name ## 如果要修改全局变量的数据,需要先声明
print("修改前的name: ", name) #查看全局变量
name = "jerry" #修改全局变量
print("修改后的name: ", name)
test_str()
运行结果:
修改前的name: tom
修改后的name: jerry
2、修改全局变量的数据:全局变量是一个列表
def test_list():
print("全局变量的数据fav: ", fav)
#修改list数据
fav.append("CCTV")
print("全局变量的数据fav: ", fav)
test_list()
print("普通代码中全局变量fav: ", fav)
运行结果:
全局变量的数据fav: [‘lol’]
全局变量的数据fav: [‘lol’, ‘CCTV’]
普通代码中全局变量fav: [‘lol’, ‘CCTV’]
全局变量和局部变量的冲突问题:
# 全局变量
name = "tom"
# 函数中局部变量
def test():
name = "jerry"
print("函数中访问name: ", name)
test()
print("函数外访问name: ", name)
运行结果:
函数中访问name: jerry
函数外访问name: tom
***正常情况下,变量数据的访问,函数中如果出现了和全局变量重名的变量——
1.函数外部访问:
优先访问全局变量 然后访问局部变量
2.函数内部访问:
就近原则:谁离访问代码近,就优先访问谁。
困扰:
什么时候定义数据为全局变量?什么时候定义数据为局部变量呢?
——如果一个数据需要被多个函数公共使用,建议定义为全局变量。
如:系统中保存所有用户的变量~可能会被系统中任意函数使用,所以定义为全局变量。
——如果一个数据只是当前函数中运算临时需要,建议定义为局部 变量。
如:系统中登录函数,用户输入账号+密码,验证是否正确返回登录结果【成功|失败】,用户输入的账号+密码临时在当前函数中验证使用,函数执行完成后失去了意义;输入的账号+密码,定义为局部变量。