函数能调用函数外的变量,那函数外能否调用函数里的变量?如果函数外跟函数里都有相同变量名,会优先调用哪个变量?
变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用),主要分为两类:局部变量和全局变量。
在Python中,定义在函数外部的变量就称之为全局变量;定义在函数内部变量就称之为局部变量。
# 定义在函数外部的变量num = 10# 定义一个函数def func(): # 函数体代码 # 定义在函数内部的变量(局部变量) i = 1
str1 = 'hello'# 定义一个函数def func(): # 在函数内部调用全局变量str1 print(f'在局部作用域中调用str1变量:{str1}')# 直接调用全局变量str1print(f'在全局作用域中调用str1变量:{str1}')# 调用func函数func()
局部变量:在函数的调用过程中,开始定义,函数运行过程中生效,函数执行完毕后,销毁。
# 定义一个函数def func(): # 在函数内部定义一个局部变量 num = 10 print(f'在局部作用域中调用num局部变量:{num}')# 调用func函数func()# 在全局作用域中调用num局部变量print(f'在全局作用域中调用num局部变量:{num}')
思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?
答:将这个数据存储在一个全局变量里面。
如果把通讯录管理系统更改为模块化编程模式(程序 => 函数),面临问题:
# 定义全局变量info = []# 定义funcA函数def funcA(): # 使用global声明全局变量 global info # 向info全局变量中添加数据 info.append({...})# 定义funcB函数def funcB(): # 共享全局作用域中的全局变量info for i in info: ...
这个会产生一个问题:我们能不能在局部作用域中对全局变量进行修改呢?
# 定义全局变量num = 10num = 10# 定义一个函数funcdef func(): # 尝试在局部作用域中修改全局变量 num = 20# 调用函数funcfunc()# 尝试访问全局变量numprint(num)
最终结果:弹出10,所以由运行结果可知,在函数体内部理论上是没有办法对全局变量进行修改的,所以一定要进行修改,必须使用global关键字。
# 定义全局变量num = 10num = 10# 定义一个函数funcdef func(): # 尝试在局部作用域中修改全局变量 global num num = 20 # global num = 20 会报错,要像上面一样分开# 调用函数funcfunc()# 尝试访问全局变量numprint(num)
# 定义全局变量info = []# 定义funcA函数:向全局变量中添加信息def funcA(): # 使用global声明全局变量 global info # 向info全局变量中添加数据 info.append({...})# 定义funcB函数:查询功能,需要共享全局作用域中的通讯录信息def funcB(): # 共享全局作用域中的全局变量info for i in info: ...
def test1(): return 50def test2(num): print(num)# 1、保存函数test1的返回值result = test1()# 2、将函数返回值所在变量作为参数传递到test2函数test2(result)
今日学习完毕,课后作业:
编写一个Python程序,演示全局变量和局部变量的作用域差异。要求明确定义一个全局变量和一个局部变量,并展示它们在不同作用域内的可访问性。