Python入门到精通Day10:01-07-函数(二)全局变量、多函数、返回值

目标:
变量作用域
多函数程序执行流程
函数的返回值
函数的参数
拆包和交换两个变量的值
引用
可变和不可变类型

一、变量作用域
指的是变量生效的范围,主要分为两类:局部变量或全局变量。

局部变量:是定义在函数体内部的变量,即只在函数体内部生效。

def testA():
    a = 100
    print(a)

testA() # 100
# print(a)    # 报错:NameError: name 'a' is not defined
# 变量a是定义在testA函数内部的变量,在函数外部访问则立即报错。

局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。

全局变量:指的是在函数体内、外都能生效的变量。
思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办:
答:将这个数据存储在一个全局变量里面。

# 定义全局变量
a = 100

def testA():
    print(a)    # 访问全局变量a,并打印变量a存储的数据

def testB():
    print(a)    # 访问全局变量a,并打印变量a存储的数据

testA() # 100
testB() # 100

思考:testB函数需求修改变量a的值为200,如何修改程序?

a = 100

def testA():
    print(a)

def testB():
    a = 200
    print(a)

testA()  # 100
testB()  # 200
print(f'全局变量a = {a}')  # 全局变量a = 100

思考:在testB函数内部的a = 200中的变量a是在修改全局变量a吗?
答:不是。观察上述代码发现,12行得到a的数据是100,仍然是定义全局变量a时候的值,而没有返回testB函数内部的200。综上:testB函数内部的 a = 200 是定义了一个局部变量。

思考:如何在函数体内部修改全局变量?

a = 100

print(a)    # 100

def testA():
    print(a)

def testB():
    # global 关键字声明a是全局变量
    global a
    a = 200
    print(a)

testA() # 100
testB() # 200
print(a)    # 200
'''
总结:
    1、如果在函数里面直接把变量a=200赋值,此时的a不是全局变量的修改,而是相当于在函数内部声明了一个新的局部变量而已;
    2、函数体内部修改全局变量:先global声明a为全局变量,然后再变量重新赋值。 
'''

二、多函数程序执行流程
一般在实际开发过程中,一个程序往往由多个函数(后面知识中会讲解类)组成,并且多个函数共享某些数据,如下所示:

共用全局变量

glo_num = 0


def test1():
    global glo_num
    # 修改全局变量
    glo_num = 100


def test2():
    # 调用test1函数中修改后的全局变量
    print(glo_num)


print(glo_num)  # 0
test2()  # 0 # 因为修改的函数没执行

# 2. 调用test1函数,执行函数内部代码:声明和修改全局变量
test1()
# 3. 调用test2函数,执行函数内部代码:打印
test2()  # 100
print(glo_num)  # 100

返回值作为参数传递

def test1():
    return 50


def test2(num):
    print(num)


# 1. 保存函数test1的返回值
result = test1()

# 2. 将函数返回值所在变量作为参数传递到test2函数
test2(result)  # 50

三、函数的返回值
思考:如果一个函数如果有两个return(如下所示),程序如何执行?

def return_num():
    return 1
    return 2


result = return_num()
print(result)   # 1

答:只执行了第一个return,原因是因为return可以退出当前函数,导致return下方的代码不执行。

思考:如果一个函数要有多个返回值,该如何书写代码?

def return_num():
    return 1, 2


result = return_num()
print(result)  # (1, 2)

注意:
1、return a, b 写法,返回多个数据的时候,默认是元组类型。
2、return后面可以连接列表、元组或字典,以返回多个值。

def return_num():
    return (10, 20)


result = return_num()
print(result)  # (10, 20)
def return_num():
    return [100, 200]


result = return_num()
print(result)  # [100, 200]
def return_num():
    return {'name': 'Python', 'age': 30}


result = return_num()
print(result)  # {'name': 'Python', 'age': 30}

你可能感兴趣的:(Python,python)