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

news2024/11/23 15:39:39

嵌套调用及执行流程

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

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

嵌套调用语法:

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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1827135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8个宝藏APP,个个都牛逼哈拉!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 目前win7已经逐渐淡出人们的视野&#xff0c;大部分人都开始使用win10&#xff0c;在日常工作和使用中&#xff0c;创客们下载神奇的软件能大幅提…

怎样快速清理电脑里的所有软件 怎么删除干净电脑软件

苹果电脑内的软件来源主要有两个&#xff0c;一是系统预装&#xff0c;二是用户自行下载。但并不是所有应用程序都是高频使用状态&#xff0c;甚至好多是从未打开过的“屏幕装饰”。小编今日独家攻略&#xff0c;内存告急如何快速清理电脑里的所有软件&#xff0c;怎么删除干净…

线程池ThreadPoolExecutor使用指南

线程池ThreadPoolExecutor使用指南 &#x1f9d0;使用线程池的好处是什么&#xff1f; 统一管理&#xff0c;减少资源获取创建的开销&#xff0c;提高利用率。 &#x1f527;线程池的参数 ​ThreadPoolExecutor​ 3 个最重要的参数&#xff1a; ​corePoolSize​ : 任务队列…

问:IP写作如何商业化?

这个问题也是很多朋友&#xff0c;或者新手小白问的最多的问题&#xff0c; 毕竟我们做副业都是为了挣钱嘛&#xff0c; 那么&#xff0c;回到问题&#xff0c;IP写作如何商业化&#xff1f; 这个问题其实对于我现在要日更的目标来说为时尚早&#xff0c;不过也可以先了解一下。…

Javaweb登录校验

登录校验 JWT令牌的相关操作需要添加相关依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>一、摘要 场景&#xff1a;当我们想要访问一个网站时&am…

如何用AI提高产品经理的工作效率

最近我跟几个产品经理聊天&#xff0c;发现有些人居然还没有使用过ChatGPT、MidJourney、NotionAI 等AI工具。 产品经理有个重要的素质是好奇心&#xff0c;好奇心能够帮助产品经理发现新机会、了解用户需求、学习新知识和探索竞争对手&#xff0c;从而更好地完成产品开发和管…

mediamtx流媒体服务器测试

MediaMTX简介 在web页面中直接播放rtsp视频流&#xff0c;重点推荐&#xff1a;mediamtx&#xff0c;不仅仅是rtsp-CSDN博客 mediamtx github MediaMTX(以前的rtsp-simple-server)是一个现成的和零依赖的实时媒体服务器和媒体代理&#xff0c;允许发布&#xff0c;读取&…

android13 应用冷启动

1 概述 launcher 通过binder到systemserver中atms中发送startActivity请求 startProcess向zygote发送启动新进程请求 zygote收到请求&#xff0c;fork新进程并调用ActivityThread的main初始化 新进程启动&#xff0c;发送attachApplication给ams&#xff0c;告诉他新进程启动…

C++ 44 之 指针运算符的重载

#include <iostream> #include <string> using namespace std;class Students04{ public:int m_age;Students04(int age){this->m_age age;}void showAge(){cout << "年龄是&#xff1a; " << this->m_age << endl;}~Students0…

155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…

RestTemplate远程请求的艺术

1 简说 编程是一门艺术,追求优雅的代码就像追求优美的音乐。 很多有多年工作经验的开发者,在使用RestTemplate之前常常使用HttpClient,然而接触了RestTemplate之后,却愿意放弃多年相处的“老朋友”,转向RestTemplate。那么一定是RestTemplate有它的魅力,有它的艺术风范。…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(三)质量管理方法与常见工具

第二部分 质量管理领域专业知识 《质量管理体系基础考试大纲》中规定的考试内容&#xff1a; 3.2 质量管理领域专业知识 a) 了解质量管理方法与工具相关知识&#xff0c;包括&#xff1a; 质量管理方法与工具的内涵与作用、发展历程与应用现状、分类与选择常用的应用软件…

使用 Vue CLI 脚手架生成 Vue 项目

最近我参与了一个前端Vue2的项目。尽管之前也有过参与Vue2项目的经验&#xff0c;但对一些前端Web技术并不十分熟悉。这次在项目中遇到了很多问题&#xff0c;所以我决定借此机会深入学习Vue相关的技术栈。然而&#xff0c;直接开始深入钻研这些技术可能会显得枯燥&#xff0c;…

随笔-来了,安了

依照领导定的规矩&#xff0c;周五又去了分公司&#xff0c;赋能一线去了。到了地方就是开会->现场解决问题->干饭->开会过需求、提供解决方案&#xff0c;充实得厉害。强度也不小&#xff0c;中午干的一大碗饭&#xff0c;到五点就饿了。 六点带着分公司催着上线的需…

jupyter notebook中使用不同的anaconda环境及常用conda命令

conda命令 在jupyter notebook中使用不同的anaconda环境其他常用conda命令 在jupyter notebook中使用不同的anaconda环境 创建环境 myenvname 需替换为自己的环境名称 conda create --name myenvname python3.7激活环境 conda activate myenvname 在该环境中安装Jupyter N…

MongoDB~事务了解;可调一致性模型功能与因果一致性模型功能分析

背景 MongoDB 从 3.0版本引入 WiredTiger 存储引擎之后开始支持事务&#xff0c;MongoDB 3.6之前的版本只能支持单文档的事务&#xff0c;从 MongoDB 4.0版本开始支持复制集部署模式下的事务&#xff0c;从 MongoDB 4.2版本开始支持分片集群中的事务。 根据官方文档介绍&…

C++11 move左值转化为右值

单纯的左值只能用左值引用和右值只能用右值引用有些局限&#xff0c;在一些情况下&#xff0c;我们也需要对左值去调用右值引用&#xff0c;从而实现将左值里的内容转移到右值中 标准定义&#xff1a; 功能就是将一个左值强制转化为右值&#xff0c;然后实现移动语义 注意&…

IP地址、子网掩码、网段、网关

前面相同就是在同一个网段 如果子网掩码和网络号相与的结果是一样的&#xff0c;那么他们就在同一个子网 IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?_掩码248可以用几个ip-CSDN博客

CTFshow之RCE代码命令远程执行第29关到第40关详细讲解。一定教会

不在沉默中崛起&#xff0c;便在沉默中变态 --莫迪大仙 引言&#xff1a;最近学习没有头绪&#xff0c;想着把ctf随便刷一刷&#xff0c;过过瘾&#xff0c;试着看能不能每条10到15道题目&#xff0c;并且写下相关的学习记录&#xff0c;持续十天&#xff01;今天是RCE板块29关…

解决 kali 中使用 vulhub 拉取不到镜像问题

由于默认情况下&#xff0c;访问的镜像是国外的&#xff0c;而从 2023 年开始&#xff0c;docker 的镜像网站就一直访问不了&#xff0c;所以我们可以把镜像地址改成国内的阿里云镜像地址。 1、在 cd /etc/docker/目录下创建或修改daemon.json文件 sudo touch daemon.json 2、在…