Python学习计划——3.3作用域(局部和全局变量)

Python 中的变量作用域决定了变量的可访问性和生命周期。作用域分为局部作用域和全局作用域。

1. 局部变量

局部变量是在函数内部定义的变量,其作用范围仅限于函数内部。函数执行结束后,局部变量会被销毁。

示例:

def my_function():x = 10  # 局部变量print("函数内部:", x)my_function()
# print(x)  # 这行代码会报错,因为 x 是局部变量,在函数外部无法访问
2. 全局变量

全局变量是在函数外部定义的变量,其作用范围在整个程序中。全局变量可以在函数内部和外部访问和修改。

示例:

x = 10  # 全局变量def my_function():print("函数内部:", x)my_function()
print("函数外部:", x)
3. 修改全局变量

在函数内部修改全局变量时,需要使用 global 关键字声明该变量为全局变量。

示例:

x = 10  # 全局变量def my_function():global xx = 20  # 修改全局变量print("函数内部:", x)my_function()
print("函数外部:", x)
4. 嵌套函数中的作用域

在嵌套函数中,内部函数可以访问外部函数的局部变量,但不能直接修改。如果需要修改外部函数的局部变量,可以使用 nonlocal 关键字。

示例:

def outer_function():x = 10  # 外部函数的局部变量def inner_function():nonlocal xx = 20  # 修改外部函数的局部变量print("内部函数:", x)inner_function()print("外部函数:", x)outer_function()
5. LEGB 规则

Python 中的变量查找顺序遵循 LEGB 规则:

  • Local(局部作用域):函数内部。
  • Enclosing(嵌套作用域):外部嵌套函数。
  • Global(全局作用域):函数外部。
  • Built-in(内置作用域):Python 预定义的变量,如 lenprint 等。

示例:

x = "global"def outer_function():x = "enclosing"def inner_function():x = "local"print(x)  # 输出: localinner_function()print(x)  # 输出: enclosingouter_function()
print(x)  # 输出: global
6. 可运行的Python案例

下面是一个完整的Python程序,演示了局部变量和全局变量的作用域,以及在嵌套函数中使用 nonlocal 关键字。

# 全局变量
x = "global"def outer_function():# 外部函数的局部变量x = "enclosing"def inner_function():# 内部函数的局部变量x = "local"print("内部函数:", x)  # 输出: localinner_function()print("外部函数:", x)  # 输出: enclosingouter_function()
print("全局作用域:", x)  # 输出: globalprint("--- 修改全局变量 ---")def modify_global():global xx = "modified global"print("函数内部修改全局变量:", x)modify_global()
print("全局作用域:", x)  # 输出: modified globalprint("--- 嵌套函数中修改局部变量 ---")def outer_function_with_nonlocal():x = "enclosing"def inner_function():nonlocal xx = "modified enclosing"print("内部函数:", x)  # 输出: modified enclosinginner_function()print("外部函数:", x)  # 输出: modified enclosingouter_function_with_nonlocal()

可以将上面的代码复制到你的IDE中运行,观察程序的输出。这个案例综合了局部和全局变量的基本知识,帮助你理解和掌握变量的作用域和LEGB规则。继续加油,学习Python会越来越有趣和有用!

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

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

相关文章

HarmonyOS Next 省市区级联(三级联动)筛选框

效果图 完整代码 实例对象 export class ProvinceBean {id?: stringpid?: stringisSelect?: booleandeep?: objectextName?: stringchildren?: ProvinceBean[] }级联代码 import { MMKV } from tencent/mmkv/src/main/ets/utils/MMKV import { ProvinceBean } from ..…

【Rust光年纪】从虚拟机到数据库:探索Rust语言的重要库与框架

Rust语言重要库大揭秘:虚拟机管理、数据库驱动、数据序列化、Redis客户端一网打尽 前言 随着Rust语言的不断发展,越来越多的优秀库和框架涌现出来,为开发者提供了丰富的工具和资源。本文将介绍一些用于Rust语言的重要库和客户端&#xff0c…

通过Faiss和DINOv2进行场景识别

目标:通过Faiss和DINOv2进行场景识别,确保输入的照片和注册的图片,保持内容一致。 MetaAI 通过开源 DINOv2,在计算机视觉领域取得了一个显着的里程碑,这是一个在包含1.42 亿张图像的令人印象深刻的数据集上训练的模型…

基于 HTML+ECharts 实现智慧运维数据可视化大屏(含源码)

智慧运维数据可视化大屏:基于 HTML 和 ECharts 的实现 在现代企业中,运维管理是确保系统稳定运行的关键环节。随着数据量的激增,如何高效地监控和分析运维数据成为了一个重要课题。本文将介绍如何利用 HTML 和 ECharts 实现一个智慧运维数据可…

深入理解 Java NIO:ByteBuffer和MappedByteBuffer的特性与使用

目录 前言 ByteBuffer是什么 重要特点 分配缓冲区 读写模式切换 操作文本数据 操作基本数据类型 案例解析-循环输出数据 MappedByteBuffer是什么 MappedByteBuffer 的工作机制 刷盘时机 总结 前言 在深入学习 RocketMQ 这款高性能消息队列框架的源码时&#xff0c…

醒醒,别睡了...讲《数据分析pandas库》了—/—<1>

一、了解pandas No.1 Pandas 是 Python 语言的一个扩展程序库,用于数据分析,是一个强大的分析结构化数据的工具集,基础是Numpy库,可以去参考前面所讲的课。(提供高性能的矩阵运算) No.2 应用 :P…

Kylin Cube的灵动更新:部分刷新策略全解析

Kylin Cube的灵动更新:部分刷新策略全解析 Apache Kylin是一个高性能的分布式分析引擎,它通过预计算和存储多维数据模型(Cube)来加速对大数据集的查询。在实际应用中,数据经常发生变化,这就引出了一个问题…

vue上传Excel文件并直接点击文件列表进行预览

本文主要内容:用elementui的Upload 组件上传Excel文件,上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求,有很多种方法实现。但是不想要跳转外部地址,所以用了xlsx插件来解析表格,并展…

【数据集处理】Polars库、Parquet 文件

一、Polars 库 Polars 库在数据处理和分析方面具有显著的优势,特别是在性能和效率上。 1. 高性能 Polars 设计的核心目标之一是性能优化,尤其是针对大数据集的处理: 多线程执行:Polars 利用 Rust 编写,并且默认使用…

Docker安装kkFileView实现在线文件预览

kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 官方文档地址:https://kkview.cn/zh-cn/docs/production.html 一、拉取镜像 do…

1 深度学习网络DNN

代码来自B站up爆肝杰哥 测试版本 import torch import torchvisiondef print_hi(name):print(fHi, {name}) if __name__ __main__:print_hi(陀思妥耶夫斯基)print("HELLO pytorch {}".format(torch.__version__))print("torchvision.version:", torchvi…

有多个第三方sdk 里的manifest里都配置了provider,如何优化

当多个第三方 SDK 的 AndroidManifest.xml 文件中都配置了 ContentProvider,并且导致应用启动变慢时,可以通过以下优化策略来改善启动性能: 1. 推迟 ContentProvider 的初始化 将一些 ContentProvider 的初始化推迟到应用实际需要使用时再进行,而不是在应用启动时进行。可…

用在ROS2系统中保持差速轮方向不变的PID程序

在ROS 2中,为了保持差速轮机器人的方向不变,通常需要使用PID(Proportional Integral Derivative)控制器来控制机器人的角速度。PID控制器可以帮助调整机器人的角速度,以维持其朝向不变。 下面是一个简单的ROS 2节点示…

使用el-table的案例小结——包含跨页多选、双击行、分页器、编辑\删除行、动态根据分页生成序号

首先看一下业务需求 需要实现跨页多选,双击行的时候弹出编辑对话框,对每行可以进行编辑和删除,实现分页器。 如果还没在项目中配置element-plus的可以参考文章 从零开始创建vue3项目——包含项目初始化、element-plus、eslint、axios、router…

vue import from

vue import from 导入文件,从XXXX路径;引入文件 import xxxx from “./minins/resize” import xxxx from “./minins/resize.js” vue.config.js 定义 : resolve(src);就是指src 目录 import xxxx from “/utils/auth” im…

014集——RSA非对称加密——vba源代码

今天介绍一种安全的加密方法,RSA非对称加密。 RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 部分源代码如下: qq4434402042024年3月…

【C++初阶】string类

【C初阶】string类 🥕个人主页:开敲🍉 🔥所属专栏:C🥭 🌼文章目录🌼 1. 为什么学习string类? 1.1 C语言中的字符串 1.2 实际中 2. 标准库中的string类 2.1 string类 2.…

Web响应式设计———1、Grid布局

1、网格布局 Grid布局 流动网格布局是响应式设计的基础。它通过使用百分比而不是固定像素来定义网格和元素的宽度。这样&#xff0c;页面上的元素可以根据屏幕宽度自动调整大小&#xff0c;适应不同设备和分辨率。 <!DOCTYPE html> <html lang"en"> &l…

并发线程学习(Java)

消费者生产者模型 package thread;import java.util.LinkedList; import java.util.Queue;public class ProducerConsumer {private static final int MAX_SIZE 5;private final Queue<Integer> buffer new LinkedList<>();public synchronized void producer(i…

element表单disabled功能失效问题

element表单disabled功能失效问题 场景:当需要根据商品状态来判断是否开启disabled来禁用表单时, disabled绑定了对应的值, 但无论商品是哪种状态, 表单都能操作, disabled失效 <el-form-item label"商品分类"><el-selectv-model"form.packagesTypeI…