作用域、局部和全局变量-Day3

一、概述

程序语言中需要声明变量,变量的作用范围称为作用域,根据作用域的不同又分为:

  • 局部变量
  • 全局变量

二、局部变量和全局变量

1、局部变量:指局部生效,定义在函数模块内的变量只能在函数里面生效,函数模块之外无法使用。这个函数就是这个变量的作用域。

示例代码

def change_name(name):
    print("before change: ",name)
    name='SZK'   #这个函数就是这个变量的作用域
    print("after change: ",name)

name = "wesley"
print("---------调用change_name---------")
change_name(name)
print("---------打印name---------")
print(name)

#返回值:
---------调用change_name---------
before change:  wesley
after change:  SZK                 #局部变量生效
---------打印name---------
wesley

 

 2、全局变量

全局变量,在整个程序中而不是函数中生效的变量,在代码的顶层声明。

示例代码:

school="Oldboy edu"    #定义全局变量

def test_1():
    print("school:",school)

def test_2():
    school='Alex python'     #定义局部变量
    print("school:",school)

print("-------test_1-------")
test_1()
print("-------test_2-------")
test_2()

#返回值:
-------test_1-------
school: Oldboy edu     #全局变量
-------test_2------- 
school: Alex python    #局部变量

 从上面的例子可以看出全局变量的优先级低于局部变量,当函数模块内没有局部变量,才会去找全局变量。那如果想要将局部变量声明成全局变量呢?

 

示例一:将局部变量声明为全局变量

school="Oldboy edu"

def test_1():
    global school
    school='Alex python'
    print("school:",school)

print("-------打印局部变量-------")
test_1()
print("-------打印全局变量-------")
print("school: ",school)

#返回值:
-------打印局部变量-------
school: Alex python
-------打印全局变量------- 
school:  Alex python      #局部变量声明成全局变量

 

 示例二:直接将函数中的局部变量声明成全局变量

def test_1():
    global school
    school='Alex python'
    print("school:",school)

print("-------打印局部变量-------")
test_1()
print("-------打印全局变量-------")
print("school: ",school)

#返回值:
-------打印局部变量-------
school: Alex python
-------打印全局变量-------
school:  Alex python

 这两种方式都是可以的,但是不建议这样做,最好不要用global关键字。

 

示例三:将列表声明为全局变量,进行修改操作

list = ['name','jesus']

def test_1():
    list[1]='God'
    print(list)

print("-------打印局部变量-------")
test_1()
print("-------打印全局变量-------")
print(list)

#返回值:
-------打印局部变量-------
['name', 'God']
-------打印全局变量-------
['name', 'God']

 从方法三可以看出,列表list被声明成全局变量,同时被重新赋值了。字符串和整数是不可以修改的,如果需要修改,需要在函数里面声明global;但是其他的数据类型,如列表(list)、字典(dict)、集合(set),包括我们后面即将要学的类(class)都是可以修改的。

 

三、总结:

  • 在函数中定义的变量称为局部变量,在程序顶层定义的变量称为全局变量
  • 全局变量的作用域是整个程序,局部变量的作用域是定义该变量的函数
  • 当全局变量和局部变量同名时:在定义局部变量的函数中,局部变量起作用;在其他地方,全局变量起作用
posted @ 2018-01-02 14:08  Wesley·zk  阅读(225)  评论(0)    收藏  举报