AI教你学Python 第11天 : 局部变量与全局变量

Day 11: 局部变量与全局变量

1. 变量概述

在Python中,变量是用于存储信息的标签。变量的类型主要由其值决定,Python对变量类型进行动态管理。在编写代码时,理解变量的作用域是至关重要的。

2. 变量的作用域

变量的作用域是指一个变量可以被访问的区域。在Python中,变量主要分为以下两类:

  • 局部变量(Local Variable):定义在函数内部,只能在该函数内访问。
  • 全局变量(Global Variable):定义在函数外的,可以在整个代码文件中的任何地方访问。
3. 局部变量与全局变量的示例

示例代码 1:局部变量

def local_variable_example():x = 10  # 局部变量print("Inside function:", x)local_variable_example()
# print(x)  # 这行代码将会引发错误,因为x是局部变量

示例代码 2:全局变量

y = 20  # 全局变量def global_variable_example():print("Inside function:", y)global_variable_example()
print("Outside function:", y)
4. 访问和修改全局变量

在函数内部,如果想要修改一个全局变量,需要使用global关键字来声明该变量是全局的。

示例代码 3:修改全局变量

z = 30  # 全局变量def modify_global_variable():global z  # 声明z为全局变量z += 10   # 修改全局变量print("Inside function:", z)modify_global_variable()
print("Outside function:", z)  # 输出将是40
5. 变量的作用域示例及代码流程图

让我们建立一个更复杂的例子,展示如何在同一代码块中同时使用局部变量和全局变量。

示例代码 4

a = 5  # 全局变量def outer_function():b = 10  # 局部变量def inner_function():nonlocal b  # 使用 nonlocal 关键字来引用外层函数的局部变量b += 5print("Inside inner_function:", b)inner_function()print("Inside outer_function:", b)outer_function()
print("Global variable a:", a)
6. 运行流程图

以下是示例代码4的运行流程图,这将帮助您理解各个变量的作用域及其变化过程。

+-----------------------+
|       开始           |
+-----------------------+|v
+-----------------------+
|     a = 5            | (全局变量)
+-----------------------+|v
+-----------------------+
|  outer_function()     |
+-----------------------+|v
+-----------------------+
|     b = 10           | (局部变量)
+-----------------------+|v
+-----------------------+
|   inner_function()    |
+-----------------------+|v
+-----------------------+
|   b += 5             | (b变为15)
+-----------------------+|v
+-----------------------+
| 打印 b (值为15)      |
+-----------------------+|v
+-----------------------+
| 打印 b (值为15)      |
+-----------------------+|v
+-----------------------+
| 打印 a (全局)        |
+-----------------------+|v
+-----------------------+
|       结束           |
+-----------------------+
7. 关键概念总结
概念定义示例
局部变量定义在函数内部的变量,只在函数内有效def func(): x = 10
全局变量定义在函数外的变量,可以在整个代码文件中访问x = 10
global 关键字用于函数内部修改全局变量,告诉Python该变量来自全局global x
nonlocal 关键字用于内嵌函数中,声明使用外层函数的局部变量nonlocal b
8. 练习题

为了巩固您对局部变量与全局变量的理解,下面是几个练习题:

  1. 编写一个函数,该函数返回一个数量,每次调用时这个数量递增,使用全局变量来存储这个数量。
  2. 修改上一个练习,使其包含一个局部变量,计算和返回调用次数的平方。
  3. 尝试在函数中直接访问未声明的全局变量,观察程序的行为。
9. 总结

掌握局部变量和全局变量的概念对编写清晰且可维护的代码至关重要。局部变量可以避免与全局命名冲突,而全局变量则可以在不同的函数间共享数据。理解如何正确使用这些变量,有助于提高代码的可读性和可维护性,使代码更易于理解和修改。


怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动窗口(6)_找到字符串中所有字母异位词

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 滑动窗口(6)_找到字符串中所有字母异位词 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论&#x1f4…

STM32 芯片启动过程

目录 一、前言二、STM32 的启动模式三、STM32 启动文件分析1、栈 Stack2、堆 Heap3、中断向量表 Vectors3.1 中断响应流程 4、复位程序 Reset_Handler5、中断服务函数6、用户堆栈初始化 四、STM32 启动流程分析1、初始化 SP、PC 及中断向量表2、设置系统时钟3、初始化堆栈并进入…

【Transformer深入学习】之一:Sinusoidal位置编码的精妙

看苏神的文章提到:Transformer原论文使用Sinusoidal位置编码,作为位置编码的一个显式解,Google 在原论文中对它的描述寥寥无几,只是简单提及了它可以表达相对位置信息,并未提及这个编码的合理性。 看了几篇文章&#x…

云计算实训50——Kubernetes基础命令、常用指令

一、Kubernetes 自动补齐 # 安装自动补齐软件 [rootmaster ~]# yum -y install bash-completion # 临时开启自动补齐功能 [rootmaster ~]# source # 永 久开启自动补齐功能 [rootmaster ~]# echo "source > ~/.bashrc 二、Kubernetes 基础命令 kubectl [command] …

【数据结构】数据结构系列学习笔记——导航篇

一:概述 数据结构是计算机科学中的核心概念之一,是优化算法性能和资源利用率的关键。在软件开发和数据处理中,选择合适的数据结构对于算法的效率至关重要。数据结构的选择通常基于数据的使用模式,包括数据元素之间的关系、数据的存…

【专题】2024中国生物医药出海现状与趋势蓝皮书报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37719 出海已成为中国医药产业实现提速扩容的重要途径。目前,中国医药产业发展态势良好,创新能力不断增强,然而也面临着医保政策改革和带量集采带来的压力。政府积极出台多项政策支持医药企业出海…

Vim编辑器常用命令

目录 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令

我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆

本教程基于自研的AI工具箱Tauri版进行VideoReapeat视频解说复述克隆。 视频解说复述克隆样片 《我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆》样片 进入软件后可以直接搜索 VideoReapeat 或者依次点击 Python音频技术/视频tools 进入该模块。 该模块会消耗TTS文本转语…

【四范式】浅谈NLP发展的四个范式

自然语言处理(Natural Language Processing,NLP)是计算机科学,人工智能,语言学关于计算机和人类自然语言之间的相互作用的领域,是计算机科学领域与人工智能领域中的一个重要方向。NLP发展到今天已经进入到了…

kubernetes架构

kubernetes cluster由master和node组成,节点上运行着若干kubernetes服务Master节点: master是kubernetes cluster的大脑,运行着的Daemon服务包括kube-apiserver,kube-scheduler,kube-controller-manager,etcd和Pod网络…

Dify 中的讯飞星火平台工具源码分析

本文主要对 Dify 中的讯飞星火平台工具 spark 进行了源码分析,该工具可根据用户的输入生成图片,由讯飞星火提供图片生成 API。通过本文学习可自行实现将第三方 API 封装为 Dify 中工具的能力。 源码位置:dify-0.6.14\api\core\tools\provide…

出厂非澎湃OS手机解BL锁

脚本作者:酷安mlgmxyysd 脚本项目链接:https://github.com/MlgmXyysd/Xiaomi-HyperOS-BootLoader-Bypass/ 参考 B站作者:蓝空穹 https://www.bilibili.com/read/cv33210124/ 其他参考:云墨清风、水墨青竹、Magisk中文网 决定解BL…

django学习入门系列之第十点《A 案例: 员工管理系统10》

文章目录 12 管理员操作12.4 密码加密12.5 获取对象(防止id错误--编辑界面等)12.6 编辑管理员12.7 重置密码 往期回顾 12 管理员操作 12.4 密码加密 密码不应该以明文的方式直接存储到数据库,应该加密才放进去 定义一个md5的方法&#xff…

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】 描述 概述 在前端开发中,遇到TypeError: Cannot read properties of null (reading indexOf)这类错误并不罕见。这个错误通常表明你试图在一个null值上调用indexOf方法&#xff0c…

飞睿智能UWB BLE Tag蓝牙防丢器模块,APP测距定位一键绑定,安全守护每一刻

我们总在不经意间与生活中的小物件擦肩而过——钥匙遗忘在咖啡厅的角落,钱包遗失在拥挤的地铁,甚至孩子的书包在人群中悄然消失……每一次的失而复得都是幸运的眷顾,但更多的是遗憾与不便。今天,就让我带你走进一个智能守护的新世…

Linux驱动开发 ——架构体系

只读存储器(ROM) 1.作用 这是一种非易失性存储器,用于永久存储数据和程序。与随机存取存储器(RAM)不同,ROM中的数据在断电后不会丢失,通常用于存储固件和系统启动程序。它的内容在制造时或通过…

【算法】遗传算法

一、引言 遗传算法(Genetic Algorithm, GA)是一种模拟生物进化过程的启发式搜索算法,它通过模拟自然选择、遗传、交叉和突变等生物学机制来优化问题的解决方案。遗传算法因其通用性、高效性和鲁棒性,在多个领域中得到了广泛应用&a…

esp32核心跑分程序

https://github.com/ochrin/coremark/tree/esp32 最近一直捣腾esp32s3 (Sense) 做微型摄像。过程中发现一款不错的跑分软件,特此记一笔。 其中针对esp32s3各类参数设定(用idf.py menuconfig),做个记录。 CPU Frequency去240MHz&#xff08…

C语言 | Leetcode C语言题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; int numberOfArithmeticSlices(int* nums, int numsSize) {if (numsSize 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for (int i 2; i < numsSize; i…

Java | Leetcode Java题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; class Solution {public String addStrings(String num1, String num2) {int i num1.length() - 1, j num2.length() - 1, add 0;StringBuffer ans new StringBuffer();while (i > 0 || j > 0 || add ! 0) {int x i > 0 ? n…