Python面试宝典13 | Python 变量作用域,从入门到精通

今天,我们来深入探讨一下 Python 中一个非常重要的概念——变量作用域。理解变量作用域对于编写清晰、可维护、无 bug 的代码至关重要。

什么是变量作用域?

简单来说,变量作用域就是指一个变量在程序中可以被访问的范围。Python 中有四种作用域:

  1. 局部作用域(Local): 在函数或代码块内部定义的变量,只能在该函数或代码块内部访问。局部变量的作用域范围最小,只能在定义它们的函数或代码块内部使用。

    def my_function():
        x = 10  # 局部变量
        print(x)
    
    my_function()  # 输出:10
    # print(x)  # 报错:NameError: name 'x' is not defined
    
  2. 嵌套作用域(Enclosing): 在嵌套函数中,外层函数定义的变量,在内层函数中可以访问。嵌套作用域主要用于嵌套函数的情况,内层函数可以访问外层函数中定义的变量。

    def outer_function():
        x = 10
    
        def inner_function():
            print(x)  # 访问外层函数的变量
    
        inner_function()
    
    outer_function()  # 输出:10
    
  3. 全局作用域(Global): 在函数或代码块外部定义的变量,可以在程序的任何地方访问。全局变量的作用域范围最大,可以在整个程序中访问。

    x = 10  # 全局变量
    
    def my_function():
        print(x)
    
    my_function()  # 输出:10
    print(x)  # 输出:10
    
  4. 内置作用域(Built-in): Python 内置的函数和常量,例如 printlen 等,可以在程序的任何地方直接使用。内置作用域包含了 Python 解释器预先定义的一些函数和常量。

作用域的查找顺序(LEGB 法则)

当我们在程序中使用一个变量时,Python 会按照以下顺序查找该变量的定义:

  1. 局部作用域(Local)
  2. 嵌套作用域(Enclosing)
  3. 全局作用域(Global)
  4. 内置作用域(Built-in)

这种查找顺序被称为 LEGB 法则,可以帮助我们理解 Python 变量的查找规则。

作用域的注意事项

  • 同名变量: 如果在不同的作用域中定义了同名变量,Python 会优先使用局部作用域中的变量。在不同的作用域中定义同名变量时,Python 会根据 LEGB 法则进行查找,优先使用局部作用域中的变量。

  • 修改全局变量: 如果需要在函数内部修改全局变量,需要使用 global 关键字声明。在函数内部修改全局变量时,需要使用 global 关键字声明该变量为全局变量,否则 Python 会将其视为局部变量。

    x = 10
    
    def my_function():
        global x  # 声明 x 为全局变量
        x = 20
    
    my_function()
    print(x)  # 输出:20
    

作用域的实际应用

理解变量作用域对于编写大型程序非常重要。合理使用作用域可以帮助我们:

  • 避免命名冲突: 不同的作用域可以定义同名变量而不会相互影响,避免命名冲突。
  • 提高代码可读性: 作用域可以限制变量的访问范围,使代码更易于理解和维护。
  • 隐藏实现细节: 通过将变量限制在局部作用域中,可以隐藏实现细节,提高代码的封装性。

总结

理解 Python 变量作用域对于编写清晰、可维护的代码至关重要。掌握作用域的概念可以帮助我们避免命名冲突、提高代码可读性、隐藏实现细节。

如果觉得不错,随手点个赞吧,如果想第一时间收到推送,也可以关注下我~谢谢你看我的文章,我们,下次再见。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jason配置环境变量

jason官网 https://jason-lang.github.io/ https://github.com/jason-lang/jason/releases 步骤 安装 Java 21 或更高版本 安装 Visual Studio Code 根据操作系统,请按照以下具体步骤操作 视窗 下载 Jason 的最新版本,选择“jason-bin-3.3.0.zip”…

机器学习--概览

一、机器学习基础概念 1. 定义 机器学习(Machine Learning, ML):通过算法让计算机从数据中自动学习规律,并利用学习到的模型进行预测或决策,而无需显式编程。 2. 与编程的区别 传统编程机器学习输入:规…

如何使用SliverGrid组件

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverList组件相关的内容,本章回中将介绍SliverGrid组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverGrid组件是一种网格类组件,主要用来…

大模型培训讲师老师叶梓分享:DeepSeek多模态大模型janus初探

以下视频内容为叶梓分享DeepSeek多模态大模型janus的部署,并验证其实际效果,包括图生文和文生图两部分。 叶梓老师人工智能培训分享DeepSeek多模态大模型janus初探 DeepSeek 的多模态大模型 Janus 是一款强大的 AI 模型,专注于图像和文本的多…

一文掌握ADB的安装及使用

文章目录 一、什么是ADB?二、 安装ADB2.1 下载ADB2.2 配置环境变量 三、连接Android设备四、 常用ADB命令五、ADB高级功能5.1 屏幕截图和录制5.2 模拟按键输入5.3 文件管理5.4 系统设置管理5.5 系统操作指令5.6 日志操作指令5.7 APK操作指令5.8 设备重启和恢复 六、…

【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

bat脚本实现自动化漏洞挖掘

bat脚本 BAT脚本是一种批处理文件,可以在Windows操作系统中自动执行一系列命令。它们可以简化许多日常任务,如文件操作、系统配置等。 bat脚本执行命令 echo off#下面写要执行的命令 httpx 自动存活探测 echo off httpx.exe -l url.txt -o 0.txt nu…

Kafka下载

一、Kafka下载 下载地址:https://kafka.apache.org/downloads 二、Kafka安装 因为选择下载的是 .zip 文件,直接跳过安装,一步到位。 选择在任一磁盘创建空文件夹(不要使用中文路径),解压之后把文件夹内容…

学习日记-250202

现在开始要继续写我的日记了......(也可以当作笔记吧) 一.论文 Prompt Transfer for Dual-Aspect Cross Domain Cognitive Diagnosis 主要内容: 主要是加入prompt提示, 为重叠实体设计个性化的提示,为非重叠实体设计共…

【人工智能学习笔记 一】 AI分层架构、基本概念分类与产品技术架构

新的一年2025要对AI以及LLM有个强化的学习,所以第一篇先对整体有个大概的认知,一直分不清LLM和AI的关系,在整个体系里的位置,以及AIGC是什么东西,AI AGENT类似豆包等和大语言模型的具体关系是什么,整个AI的…

git多人协作

目录 一、项目克隆 二、 1、进入克隆仓库设置 2、协作处理 3、冲突处理 4、多人协作分支的推送拉取删除 1、分支推送(2种) 2、远程分支拉取(2种) 3、远程分支删除 一、项目克隆 git clone 画船听雨眠/test1 (自定义的名…

线性数据结构:单向链表

放弃眼高手低,你真正投入学习,会因为找到一个新方法产生成就感,学习不仅是片面的记单词、学高数......只要是提升自己的过程,探索到了未知,就是学习。 目录 一.链表的理解 二.链表的分类(重点理解&#xf…

linux下ollama更换模型路径

Linux下更换Ollama模型下载路径指南   在使用Ollama进行AI模型管理时,有时需要根据实际需求更改模型文件的存储路径。本文将详细介绍如何在Linux系统中更改Ollama模型的下载路径。 一、关闭Ollama服务   在更改模型路径之前,需要先停止Ollama服务。…

影视文件大数据高速分发方案

在当今的数字时代,影视行业的内容创作和传播方式经历了翻天覆地的变化。随着4K、8K高清视频的普及,以及虚拟现实(VR)和增强现实(AR)技术的发展,影视文件的数据量正以前所未有的速度增长。这就要求行业内的参与者必须拥有高效的大数据传输解决…

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi ! 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心,然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理(NLP)? 2. NLP的基础技术 2.1 词袋模型(Bag-of-Words,BoW&#xff…

HTMLCSS :下雪了

这段代码创建了一个动态的雪花飘落加载动画,通过 CSS 技术实现了雪花的下落和消失效果,为页面添加了视觉吸引力和动态感。 大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能…

Android 音视频编解码 -- MediaCodec

引言 如果我们只是简单玩一下音频、视频播放,那么使用 MediaPlayer SurfaceView 播放就可以了,但如果想加个水印,加点其他特效什么的,那就不行了; 学习 Android 自带的硬件码类 – MediaCodec。 MediaCodec 介绍 在A…

一文了解阿里的 Qwen2.5 模型

最近被DeepSeek刷屏了,但是在之外阿里在2025年1月28日推出了Qwen 2.5 Max模型。 Qwen2.5-Max 的特点:大规模的 MoE 模型,预训练于超 20 万亿 tokens,并经过 SFT 和 RLHF 后训练。 性能表现:在多个基准测试中与领先模型…

DeepSeek R1 linux云部署

云平台:AutoDL 模型加载工具:Ollama 参考:https://github.com/ollama/ollama/blob/main/docs/linux.md 下载Ollama 服务器上下载ollama比较慢,因此我使用浏览器先下载到本地电脑上。 https://ollama.com/download/ollama-linux…

FlashAttention v1 论文解读

论文标题:FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 论文地址:https://arxiv.org/pdf/2205.14135 FlashAttention 是一种重新排序注意力计算的算法,它无需任何近似即可加速注意力计算并减少内存占用。…