局部变量
- 局部变量,就是在函数内部定义的变量
- 其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
- 因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量(打个比方,把你、我是当做成函数,把局部变量理解为每个人手里的手机,你可有个iPhone8,我当然也可以有个iPhone8了, 互不相关)
- 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储
- 当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了
def my_func1(): # 局部变量的作用域(使用范围)在函数的内部 函数的外部无法使用 num = 10 # 定义一个局部变量 print(num) # 调用函数 my_func1() # 10 # 再定义一个函数 def my_func2(): # 定义一个局部变量 num = 10 print(num) # 在函数内部定义的局部变量名可以和其他函数中的局部变量名相同 是不冲突的 my_func2() # 10
全局变量
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量
打个比方:有2个兄弟 各自都有手机,各自有自己的小秘密在手机里,不让另外一方使用(可以理解为局部变量);但是家里的电话是2个兄弟都可以随便使用的(可以理解为全局变量)
- 在函数外边定义的变量叫做
全局变量
- 全局变量能够在所有的函数中进行访问
# 全局变量 或者 变量(作用域是在整个模块内使用) num = 10 # 分别在两个函数内部使用了全局变量 def my_func1(): print("my_func1", num) def my_func2(): print("my_func2", num) print("函数外面", num) # 函数外面 10 my_func1() # my_func1 10 my_func2() # my_func2 10
全局与局部变量
在子程序(即函数)中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
num = 10 def my_func1(): # 在函数内部如果使用一个变量 他先从函数内部找 如果有直接使用 # 如果函数内部没有找到 会到函数外面找(全局变量) # 如果还是没有找到 就报错 num = 20 # 其实是定义了一个和全局变量名相同的局部变量 print("my_func1", num) my_func1() # my_func1 20 print("外面", num) # 外面 10
num = 10 def my_func1(): # 标识这函数内部不是定义一个局部变量 其实是对全局变量的进行修改 global num # 对全局变量的值进行修改 num = 20 print("my_func1", num) my_func1() # my_func1 20 print("外面", num) #外面 20
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
- 当函数内出现局部变量和全局变量相同名字时,函数内部中的
变量名 = 数据
此时理解为定义了一个局部变量,而不是修改全局变量的值
- 如果在函数中出现
global 全局变量的名字
那么这个函数中即使出现和全局变量名相同的变量名 = 数据
也理解为对全局变量进行修改,而不是定义局部变量 -
如果在一个函数中需要对多个全局变量进行修改,那么可以使用global a, b
school = "oldboy edu." def change_name(name): school = "Mage Linux" print("before change",name,school) name = "Alex Li" #这个函数就是这个变量的作用域 print("after change",name) name = "alex" change_name(name) print(name) print(school) #显示:oldboy edu.
school = "oldboy edu." #全局变量 def change_name(name): global school #在局部变量中改全局变量,用global school = "Mage Linux" print("before change",name,school) name = "Alex Li" #这个函数就是这个变量的作用域 print("after change",name) print(school) #函数调用之前,显示:oldboy edu. name = "alex" change_name(name) print(name) print(school) #函数调用之后,显示:Mage Linux
def change_name(): global name #外面没有这个全局变量,里面定义,最好不要用!! name = "alex" change_name() print(name) names = ["Alex","Jack","Rain"] def change_name(): names[0]="金角大王" #除了字符串和整数,列表、字典、集合、类是可以在局部中改全局变量 print("inside func",names) change_name() print(names)