程序猿大战Python——函数——嵌套调用与变量作用域

嵌套调用及执行流程

==目标:==了解函数的嵌套调用。

函数的嵌套调用指的是:在一个函数中,调用了另一个函数。

嵌套调用语法:

def 函数1():
    代码
    ...
​
def 函数2():
    代码
    # 调用函数1
    函数1()
    ...

说明:

在函数2中,调用了函数1。

例如,一起来完成:

(1)先定义一个test()函数和func()函数;

(2)接着,在函数test()中,嵌套调用func()函数,并在外部调用test()函数;

(3)执行程序,观察效果;

(4)思考:嵌套调用的执行流程是怎样的呢?

# 1.定义func()
def func():
    print("==========AA===============")
    print("==========Nfunc()============")
    print("==========BB===============")
​
# 2.定义test()、调用func()
def test():
    print("*************11****************")
    func()
    print("**********M调用了test方法**************")
    print("*************22****************")
​
# 3.调用test()
test()   # 1ANBM2
# 说明流程

==总结:==

(1)嵌套调用指的是:一个函数中,调用了另一个函数;

(2)注意:函数的嵌套调用执行流程较为复杂,需要多观察执行结果。

嵌套调用的应用

==目标:==了解函数嵌套调用的应用。

使用函数的嵌套调用,我们可以把复杂问题分解成:多个简单问题,这样便于解决问题。

比如,要求多个数的平均值。此时,我们就可以拆分为两个函数:

(a)函数A:用于求解多个数之和;

(b)函数B:调用函数A,获取多个数之和,接着,再使用和除以总个数,就能求解出平均值。

例如,一起来完成:

(1)要完成一个输出任意条横线的需求;

(2)定义函数1:用于输出一条横线;

(3)定义函数2:先循环N次,再调用函数1,可输出N条横线;

(4)执行程序,观察效果。

# 1.定义一条横线的函数
def print_one_line():
    print("-"*40)
​
# 2.N条横线
def print_lines(num):
    i = 0
    while i < num:
        # 嵌套调用
        print_one_line()
        i += 1
​
print_lines(10)

==总结:==

(1)采用函数的嵌套调用,可以让复杂问题简单化。

变量的作用域

局部变量

==目标:==掌握局部变量的使用。

先来了解一下作用域的概念!

作用域指的是:内容生效的具体范围。

接着,当根据作用域的不同,可以给变量分为两类:

(1)局部变量

(2)全局变量 [稍后讲解]

局部变量指的是:定义在函数内部的变量或参数,且只在函数中生效。

局部变量语法:

def 函数名(参数1,参数2,...):
    代码
    变量名 = 值
    ...

说明:局部变量只作用在函数中。

例如,一起来完成:

(1)定义一个函数1,有局部变量:参数;

(2)定义一个函数2,有局部变量:变量;

(3)调用函数,观察程序执行效果。

# 1.参数
def func1(a):  # 局部变量
    print(f"a值为:{a}")
​
# func1(19)
​
# 2.变量
def func2():
    b = 100  # 局部变量
    print(f"==========b值={b}")
​
# func2()
# print(b)
# 局部变量只作用于当前所在函数内, 局部变量不能作用在该函数之外的区域。
# 升级: 局部变量就是定义在局部作用范围内的变量
# for temp in "hello":
#     print(temp)
# print(temp)   # 关注业务逻辑

==总结:==

(1)请问:局部变量只作用于局部作用域内,这句话正确吗?==A、正确==;B、错误;

(2)通常地,根据变量作用域的不同,可以把变量分为:局部变量、全局变量。

全局变量

==目标:==掌握全局变量的使用。

全局变量指的是:在函数体内、外都能生效的变量。

通俗地说,与模块中定义的函数,处于同一级别的变量,就是全局变量。

全局变量语法:

变量名 = 值
​
def 函数名():
    代码
    ...
​
# 变量名 = 值

说明:

(1)全局变量是指与函数处于同一级别的变量;

(2)注意:当函数中的局部变量与全局变量同名时,在函数中使用的是局部变量的值。

需要注意的是,当要修改全局变量的值时,记得提前使用global进行声明。

global关键字语法:

# 声明
global 变量名
# 修改值
变量名 = 修改后的值

例如,一起来完成:

(1)定义一个全局变量1,并在函数内外都使用;

(2)定义一个同名的全局变量2和局部变量,并在函数内使用该同名变量;

(3)执行程序,观察效果。

# 1.定义全局变量
# a = 100
# print(a)
#
# def func():
#     print(f"输出变量值:{a}")
#
# func()   # 问题: 程序不好阅读??  -->该如何处理?
​
# 2.修改全局变量值
# number = 140
#
# def test():
#     # 对齐: 程序报错了,才需要改错.
#     global number
#     number += 2
#     print(f"修改后的number值为:{number}")
#
# test()
​
# 3.定义同名变量
age = 18
​
def show():
    age = 34
    print(f"输出age的值为:{age}")
​
# show()
print(f"age = {age}")
# 升级: 实际上,对于不可变类型的全局变量要修改值, 需要使用global声明;
# 但是对于可变类型的数据内容-全局变量, 可以不需要声明.

==总结:==

(1)当要定义一个作用在整个模块的变量时,就可以使用全局变量;

(2)注意:当要给全局变量修改值时,需要先使用()关键字来声明。==A、global==;B、nonlocal;

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就倒头睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值