发布时间:2026/9/3 16:34:19
Python 变量作用域 某个特定变量, 其可被访问以及修改的程序位置, 是由作用域来决定的。理解作用域, 能够防止意外的数据修改, 并且能让你的代码逻辑, 在程序变得越发复杂时, 更便于推理。在本章中我们将探索 中的局部作用域和全局作用域概念。1. 局部变量 (Local )函数内部所定义之地变量乃是局部变量, 其作用域被极为严格地限定在那个定义它的函数内部, 这就表意着唯能于该函数内部对这个变量进行访问以及修改, 一旦函数执行完毕, 此局部变量便会被销毁, 其所具的值也就不再能够为之访问了。1.1 局部变量示例def my_function(): # x 是一个局部变量 x 10 print(函数内部 x 的值为:, x) my_function() # 下面这行代码会导致错误因为 x 在函数外部未定义 # print(函数外部 x 的值为:, x)在此番示例当中, x属于内部的一个局部变量, 当你试着于函数外部去访问它的时候, 便会抛出报错, 这是由于此刻x已然超出了其作用域。2. 嵌套函数中的作用域若你运用了嵌套函数, 即在一个函数的内部定义了另外一个函数, 那么内层的函数能够去访问外层函数作用域当中的变量, 然而外层的函数却不能够去访问内层函数所定义的变量。def outer_function(): # outer_var 对于 outer_function 来说是局部变量 outer_var 20 def inner_function(): # inner_var 对于 inner_function 来说是局部变量 inner_var 30 # inner_function 可以访问 outer_var print(在 inner_function 内部访问 outer_var 的值:, outer_var) print(在 inner_function 内部访问 inner_var 的值:, inner_var) inner_function() # 下面这行代码会导致错误因为 inner_var 在 outer_function 的作用域中未定义 # print(在 inner_function 外部访问 inner_var 的值:, inner_var) outer_function()处于这种情形下, 能够进行访问, 鉴于它是于的封闭作用域scope里被定义的。可是, 不能够进行访问, 由于它仅仅是在的局部作用域中被定义的。3. 局部变量遮蔽 ( Local )要是存在一个局部变量, 且它和一个全局变量有着一样的名字, 那么在函数所具有的作用域范围里头, 此局部变量会对那个全局变量形成遮蔽的情况, 这所表达的意思是处在函数内部之时, 程序会优先使用那个局部变量。global_var 5 def my_function(): # 全局变量 global_var 被同名的局部变量遮蔽了 global_var 15 print(函数内部 global_var 的值为:, global_var) my_function() print(函数外部 global_var 的值为:, global_var)这里的输出结果将是函数内部 global_var 的值为: 15 函数外部 global_var 的值为: 5于内部之时, 其所指向者乃那个局部变量, 故而其值为十五。而于函数外部之际, 其指向依旧是全局变量, 所以其值维持为五。4. 全局变量 ( )全局变量, 是于任何函数之外部所定义的变量, 其作用域为整个程序, 这意谓着, 你能够在代码的任何一处地方, 包含函数的内部, 去访问并修改它。4.1 全局变量示例# global_variable 是一个全局变量 global_variable 100 def my_function(): print(函数内部 global_variable 的值为:, global_variable) my_function() print(函数外部 global_variable 的值为:, global_variable)在这个例子中在 的内部和外部都是可以被访问的。5. 在函数内部修改全局变量即使函数能够直接去访问全局变量, 然而要是你打算于函数的内部对其施行修改操作, 那么势必要运用关键字。要是不运用关键字, 当你试着给同名变量赋予值的时候, 就会将其视作在函数作用域范围里创建了一个全新的局部变量, 就如同我们在之前的“局部变量遮蔽”那一片段所看到的情况那般。global_variable 200 def modify_global(): global global_variable # 声明我们想要使用的是全局变量 global_variable 300 print(在 modify_global 内部 global_variable 的值为:, global_variable) modify_global() print(在 modify_global 外部 global_variable 的值为:, global_variable)输出结果为在 modify_global 内部 global_variable 的值为: 300 在 modify_global 外部 global_variable 的值为: 300靠着运用关键字, 咱俩确切地告知, 我们打算于函数内部去改动那名为的全局变量。6. 何时使用全局变量虽然全局变量在某些时候具备一定便利性, 然而应当尽可能减少其使用, 过度运用全局变量会致使代码在理解、调试以及维护方面出现困难, 以下是一些适用于全局变量使用的普遍准则:7. 关键字关键字在嵌套函数里被使用, 其专门用以引用, 那是**最近的封闭作用域并非是全局的**当中的变量。要是你打算于一个内层函数之中去修改外层函数作用域里面的变量, 然而又不希望在内层函数之内创建全新的同名局部变量, 那么这个关键字便会发挥作用了。7.1 示例def outer_function(): outer_var 10 def inner_function(): nonlocal outer_var # 引用来自封闭作用域的 outer_var outer_var 20 print(在 inner_function 内部 outer_var 的值为:, outer_var) inner_function() print(在 outer_function 内部 outer_var 的值为:, outer_var) outer_function()输出结果在 inner_function 内部 outer_var 的值为: 20 在 outer_function 内部 outer_var 的值为: 20若是不加以使用, 那么便会去创建一个称谓为 的全新局部变量。借由进行使用, 我们达成了对归属于 作用域的 实施修改。8. 实际案例与演示让我们来看一些更复杂的例子以巩固我们的理解。8.1 案例 1计算带折扣的总价discount_rate 0.1 # 用于折扣率的全局变量 def calculate_price(price, quantity): 计算应用折扣后的总价。 global discount_rate # 使用全局变量 (注如果仅仅是读取而不修改这行其实可以省略) # 应用折扣 discount price * discount_rate final_price (price - discount) * quantity return final_price # 示例用法 price 100 quantity 5 total_price calculate_price(price, quantity) print(总价为:, total_price) # 输出: 450.0在这个例子里头, 存在着一个全局变量, 函数运用了这个全局变量去计算折扣。8.2 案例 2使用 实现计数器def counter(): count 0 # 这是一个封闭在 counter 中的变量 def increment(): nonlocal count count 1 return count return increment # 创建一个计数器实例 my_counter counter() # 多次调用 increment 函数 print(my_counter()) # 输出: 1 print(my_counter()) # 输出: 2 print(my_counter()) # 输出: 3于此处, 函数自身被返回了, 此在相关情境里被称作闭包。每次对该函数进行调用, 所执行的实质是函数内部的代码, 此时, 包含于函数封闭作用域内的count变量会被改变。要是不存在特定条件, 每次运行时都会去创建一个新的count局部变量, 如此一来, 这个计数器便无法正常实现累加操作了。

相关新闻

2026/9/3 16:34:19

Python 在 DevOps 中的应用:自动化与监控系统的构建

随着文化以及实践的广泛普及, 开发团队跟运维团队之间的界限慢慢地变得模糊起来, 自动化以及持续交付的需求持续不断地在增长,在此进程当中, 作为一种具备高效特性且拥有灵活特质的编程语言, 在相关领域里发挥了关键的作用, 不管是自动化部署方面、基础设施管理方面, 还是系统监…

2026/9/3 16:29:18

大模型 API 到底怎么收费?一文搞懂 Token、账单和省钱套路

「AI Python 系列」第 01 栏 AI 时代的 Python 办公自动化 品牌:梅雅达编程笔记摘要: 2026数博会提出"词元增值订阅、按效付费",大模型计费方式又添新词。新手调API最怕一笔糊涂账:Token是什么?输入输出为什…

2026/9/3 16:49:21

R语言医学数据分析实战:从环境搭建到项目复现的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 16:49:21

Echarts动态排名柱状图:自适应跨端实现与性能优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 16:49:21

电商商品标题结构化解析:从正则到NER的实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 16:49:21

Stata分类变量编码:encode命令原理、陷阱与最佳实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/3 0:02:06

零基础装 OpenClaw 小龙虾 AI:Windows 一键部署教程与避坑要点

Windows 部署 OpenClaw 完整教程|本地 AI 智能体 5 分钟落地,环境配置一次搞定 版本说明:Windows 3.1.0 / Mac 2.7.9 写在前面 近两年开源 AI 领域有一款被称作「数字员工」的工具持续走热,它就是 OpenClaw,圈内人更习…

2026/9/3 0:02:06

Hermes Agent 本地部署新方案:Windows 整合包减少依赖报错

Windows 本地部署 Hermes 太麻烦?这版一键包 5 分钟快速跑通 很多人想体验 Hermes Agent,但真正开始部署时,往往会卡在环境配置这一步。 需要安装各类依赖、调试运行环境、处理路径问题,还容易遇到命令行报错、系统拦截、文件缺…

2026/9/3 0:02:06

实测 OpenClaw 一键包,5 分钟完成本地自动化环境搭建

OpenClaw 本地 AI 自动化工具部署指南|使用一键包规避环境配置难题 痛点:部署 AI 自动化工具常常要处理 Python、Node.js 各类依赖,版本冲突、环境配置耗费大量时间,OpenClaw 提供一键安装包,降低部署门槛。 适配系统&…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…