python-局部变量与全局变量作用域

局部变量

  • 局部变量,就是在函数内部定义的变量
  • 其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的
  • 因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量(打个比方,把你、我是当做成函数,把局部变量理解为每个人手里的手机,你可有个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)
原文地址:https://www.cnblogs.com/peiya/p/11988909.html