27-高级特性之作用域(1)

1.原理

1.全局变量是指函数外定义的,局部是指函数体内定义的;函数内部global 定义的也是全局。

2.全局变量:

  • 读操作:函数局部区或者全局区,均可以直接引用。(除非被局部变量屏蔽,想不被屏蔽,用global声明)
  • 写操作:想要在函数局部区引用全局变量

1)若全局变量是dict和list (注意tuple本身不可修改),可以直接做append,pop的操作,但是赋值操作必须加global关键字。
2)若全局变量是其他类型,只有赋值操作。在函数内部被赋值需要global 声明

3.局部变量只能在函数内部读和写(一旦在外部使用局部变量就变成创建同名的全局变量,有质的变化)

4.优先级:局部变量>全局变量 { 函数内部若存在同名的局部变量,会屏蔽前面定义的全局变量}

2.代码

  • 测试1

    name = 'Tim' #全局变量
    def f1():
    age = 18 #局部变量
    print(age,name)

    def f2():
    age=19 #局部变量
    print(age,name)

    f1() #Tim
    f2() #Tim

  • 测试2

    name = 'Tim' #全局变量

    def f1():
    age = 18 #局部变量
    global name #定义全局变量
    name = 'Eric'
    print(age,name)
    f1()
    print(name) #Eric

  • 测试3

    NAME = ['Tim','mike'] #全局变量
    NAME1 = ['Eric','Jeson'] #全局变量
    NAME3 = ['Tom','jane'] #全局变量
    def f1():
    NAME.append('Eric') #列表的append方法可改变外部全局变量的值
    print('函数内NAME: %s'%NAME)
    NAME1 = '123' #重新赋值不可改变外部全局变量的值
    print('函数内NAME1: %s'%NAME1)
    global NAME3 #如果需要重新给列表赋值,需要使用global定义全局变量
    NAME3 = '123'
    print('函数内NAME3: %s'%NAME3)
    f1()
    print('函数外NAME: %s'%NAME)
    print('函数外NAME1: %s'%NAME1)
    print('函数外NAME3: %s'%NAME3)
    '''
    函数内NAME: ['Tim', 'mike', 'Eric']
    函数内NAME1: 123
    函数内NAME3: 123
    函数外NAME: ['Tim', 'mike', 'Eric']
    函数外NAME1: ['Eric', 'Jeson']
    函数外NAME3: 123
    '''

3. 参考文献:

https://www.cnblogs.com/guqing/p/6110922.html

原文地址:https://www.cnblogs.com/LS1314/p/8504509.html