python 变量范围的定义与用法
文章目录
- 1. 局部变量(Local Scope)
- 示例:
- 2. 嵌套函数变量(Enclosing Scope)
- 示例:
- 说明:
- 3. 全局变量(Global Scope)
- 示例:
- 说明:
- 4. 内置变量(Built-in Scope)
- 示例:
- 作用域规则(LEGB 规则)
- 示例:LEGB 规则
- 说明:
- 总结
在 Python 中,变量的作用域(scope)决定了变量在程序中的可见性和生命周期。Python 中有以下几种作用域:
-
局部变量(Local Scope):
- 在函数内部定义的变量。
- 只能在函数内部访问。
- 函数执行结束后,局部变量会被销毁。
-
嵌套函数变量(Enclosing Scope):
- 在外层函数中定义的变量,可以被内层函数访问。
- 使用
nonlocal关键字可以在内层函数中修改外层函数的变量。
-
全局变量(Global Scope):
- 在模块级别定义的变量。
- 可以在整个模块中访问。
- 使用
global关键字可以在函数内部修改全局变量。
-
内置变量(Built-in Scope):
- Python 内置的变量和函数(如
print、len等)。 - 可以在任何地方访问。
- Python 内置的变量和函数(如
1. 局部变量(Local Scope)
局部变量是在函数内部定义的变量,只能在函数内部访问。函数执行结束后,局部变量会被销毁。
示例:
def my_function():x = 10 # 局部变量print(x)my_function() # 输出 10
print(x) # 报错:NameError: name 'x' is not defined
2. 嵌套函数变量(Enclosing Scope)
嵌套函数变量是在外层函数中定义的变量,可以被内层函数访问。如果内层函数需要修改外层函数的变量,需要使用 nonlocal 关键字。
示例:
def outer_function():x = 10 # 外层函数的变量def inner_function():nonlocal x # 声明 x 是外层函数的变量x = 20 # 修改外层函数的变量print("Inner:", x)inner_function()print("Outer:", x)outer_function()
输出:
Inner: 20
Outer: 20
说明:
nonlocal用于声明变量是外层函数的变量,而不是局部变量。- 如果没有
nonlocal,x = 20会在inner_function中创建一个新的局部变量,而不会修改外层函数的变量。
3. 全局变量(Global Scope)
全局变量是在模块级别定义的变量,可以在整个模块中访问。如果函数内部需要修改全局变量,需要使用 global 关键字。
示例:
x = 10 # 全局变量def my_function():global x # 声明 x 是全局变量x = 20 # 修改全局变量print("Inside function:", x)my_function()
print("Outside function:", x)
输出:
Inside function: 20
Outside function: 20
说明:
global用于声明变量是全局变量,而不是局部变量。- 如果没有
global,x = 20会在my_function中创建一个新的局部变量,而不会修改全局变量。
4. 内置变量(Built-in Scope)
内置变量是 Python 内置的变量和函数,可以在任何地方访问。
示例:
print(len("Hello")) # 使用内置函数 len
输出:
5
作用域规则(LEGB 规则)
Python 使用 LEGB 规则来确定变量的作用域:
- L(Local): 局部作用域。
- E(Enclosing): 嵌套函数作用域。
- G(Global): 全局作用域。
- B(Built-in): 内置作用域。
Python 会按照 LEGB 的顺序查找变量。如果局部作用域中没有找到变量,会继续在嵌套函数作用域、全局作用域和内置作用域中查找。
示例:LEGB 规则
x = 10 # 全局变量def outer_function():x = 20 # 嵌套函数变量def inner_function():x = 30 # 局部变量print("Local:", x)inner_function()print("Enclosing:", x)outer_function()
print("Global:", x)
输出:
Local: 30
Enclosing: 20
Global: 10
说明:
inner_function中的x是局部变量。outer_function中的x是嵌套函数变量。- 模块级别的
x是全局变量。
总结
| 关键字 | 作用域 | 用途 |
|---|---|---|
| 无 | 局部作用域 | 在函数内部定义变量。 |
nonlocal | 嵌套函数作用域 | 在内层函数中修改外层函数的变量。 |
global | 全局作用域 | 在函数内部修改全局变量。 |
| 无 | 内置作用域 | 使用 Python 内置的变量和函数。 |
- 使用
nonlocal和global可以明确变量的作用域,避免意外的变量覆盖。 - 如果不使用
nonlocal或global,Python 会默认创建局部变量。
相关文章:
python 变量范围的定义与用法
文章目录 1. 局部变量(Local Scope)示例: 2. 嵌套函数变量(Enclosing Scope)示例:说明: 3. 全局变量(Global Scope)示例:说明: 4. 内置变量&#…...
TRTC实时对话式AI解决方案,助力人机语音交互极致体验
近年来,AI热度持续攀升,无论是融资规模还是用户热度都大幅增长。2023 年,中国 AI 行业融资规模达2631亿人民币,较2022年上升51%;2024年第二季度,全球 AI 初创企业融资规模为 240 亿美金,较第一季…...
dev c++ ‘unordered_set‘ does not name a type
参考:https://blog.csdn.net/Zaczc/article/details/142531525 启用C11标准步骤 工具->编译选项 勾选编译时加入以下命令 在空白处添加:-stdc11 单击确定,启用成功...
算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)
🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧💪 在算法的…...
three.js+WebGL踩坑经验合集(4.2):为什么不在可视范围内的3D点投影到2D的结果这么不可靠
上一篇,笔者留下了一个问题,three.js内置的THREE.Vector3.project方法算出来的结果对于超出屏幕可见范围的点来说错得相当离谱。 three.jsWebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值…...
Kafka运维宝典 (二)- kafka 查看kafka的运行状态、broker.id不一致导致启动失败问题、topic消息积压量告警监控脚本
Kafka运维宝典 (二) 文章目录 Kafka运维宝典 (二)一、kafka broker.id冲突问题1. broker.id 冲突的影响2. 如何发现 broker.id 冲突3. 解决 broker.id 冲突的方法4. broker.id 配置管理5. 集群启动后确认 broker.id 唯一性6. brok…...
全球AI模型百科全书,亚马逊云科技Bedrock上的100多款AI模型
今天小李哥给大家介绍的是亚马逊云科技上的AI模型管理平台Amazon Bedrock上的Marketplace,这是亚马逊云科技在今年re:Invent发布的一个全新功能,将亚马逊的电商基因带到了其云计算平台,让我们能够通过Amazon Bedrock访问100多种流行、新兴和专…...
微信小程序中常见的 跳转方式 及其特点的表格总结(wx.navigateTo 适合需要返回上一页的场景)
文章目录 详细说明总结wx.navigateTo 的特点为什么 wx.navigateTo 最常用?其他跳转方式的使用频率总结 以下是微信小程序中常见的跳转方式及其特点的表格总结: 跳转方式API 方法特点适用场景wx.navigateTowx.navigateTo({ url: 路径 })保留当前页面&…...
【Elasticsearch】index:false
在 Elasticsearch 中,index 参数用于控制是否对某个字段建立索引。当设置 index: false 时,意味着该字段不会被编入倒排索引中,因此不能直接用于搜索查询。然而,这并不意味着该字段完全不可访问或没有其他用途。以下是关于 index:…...
新版IDEA创建数据库表
这是老版本的IDEA创建数据库表,下面可以自己勾选Not null(非空),Auto inc(自增长),Unique(唯一标识)和Primary key(主键) 这是新版的IDEA创建数据库表,Not null和Auto inc可以看得到,但Unique和Primary key…...
输入带空格的字符串,求单词个数
输入带空格的字符串,求单词个数 __ueooe_eui_sjje__ ---->3syue__jdjd____die_ ---->3shuue__dju__kk ---->3 #include <stdio.h> #include <string.h>// 自定义函数来判断字符是否为空白字符 int isSpace(char c) {return c || c \t || …...
C语言程序设计十大排序—希尔排序
文章目录 1.概念✅2.希尔排序🎈3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在计算机发展…...
Excel制作合同到期自动提醒!
大家好,我是小鱼。 今天分享一下如何利用Excel制作合同到期提醒表,实现Excel表格自动计算合同到期日和天数,根据合同状态和到期天数自动填充颜色提醒,超实用。先看一下效果,已经到期的合同会自动被填充为红色…...
“AI质量评估系统:智能守护,让品质无忧
嘿,各位小伙伴们!今天咱们来聊聊一个在现代社会中越来越重要的角色——AI质量评估系统。你知道吗?在这个快速发展的时代,产品质量已经成为企业生存和发展的关键。而AI质量评估系统,就像是我们的智能守护神,…...
爬虫基础之爬取某基金网站+数据分析
声明: 本案例仅供学习参考使用,任何不法的活动均与本作者无关 网站:天天基金网(1234567.com.cn) --首批独立基金销售机构-- 东方财富网旗下基金平台! 本案例所需要的模块: 1.requests 2.re(内置) 3.pandas 4.pyecharts 其他均需要 pip install 模块名 爬取步骤: …...
使用 Aryn DocPrep、DocParse 和 Elasticsearch 向量数据库实现高质量 RAG
作者:来自 Elastic Hemant Malik 及 Jonathan Fritz 组织依靠自然语言查询从非结构化数据中获取见解,但要获得高质量的答案,首先要进行有效的数据准备。Aryn DocParse 和 DocPrep通过将复杂文档转换为结构化 JSON 或 markdown 来简化此过程&a…...
Couchbase UI: Server
在 Couchbase UI 中的 Server(服务器)标签页主要用于管理和监控集群中的各个节点。以下是 Server 标签页的主要内容和功能介绍: 1. 节点列表 显示集群中所有节点的列表,每个节点的详细信息包括: 节点地址࿱…...
Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨
摘要:Web3.0作为互联网的下一代形态,承载着去中心化、开放性和安全性的重要愿景。然而,其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战,并提出利用开源21链动模式、AI智能名片及S2B2C商城…...
langchain基础(一)
模型又可分为语言模型(擅长文本补全,输入和输出都是字符串)和聊天模型(擅长对话,输入时消息列表,输出是一个消息)两大类。 以调用openai的聊天模型为例,先安装langchain_openai库 1…...
【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例
目录 说明举例 说明 简单来说,android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要,而是多个控件的属性值之比发挥作用,例如有2个控件,各自的android:layout_weight的值设为0.5和0.5࿰…...
Realistic Vision V5.1 模型安全与内容过滤部署指南
Realistic Vision V5.1 模型安全与内容过滤部署指南 如果你正在公司里部署AI图像生成服务,最头疼的问题是什么?除了模型效果和生成速度,恐怕就是内容安全了。你肯定不希望员工或者用户用它生成一些不合规的图片,这不仅可能违反公…...
别再被VS2022的C11原子操作坑了!手把手教你正确配置项目属性(附原理图解)
VS2022中C11原子操作的深度解析与实战避坑指南 当你在VS2022中首次尝试使用stdatomic.h编写多线程计数器时,可能会遇到一堵由编译器错误堆砌而成的"高墙"。这些看似晦涩的报错信息背后,隐藏着微软编译器对C11标准支持的独特实现方式。本文将带…...
3步解决华硕笔记本显示异常:G-Helper色彩配置修复指南
3步解决华硕笔记本显示异常:G-Helper色彩配置修复指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址…...
DeepSeek-OCR-2功能测评:多语言支持、复杂背景识别,实测好用
DeepSeek-OCR-2功能测评:多语言支持、复杂背景识别,实测好用 1. 引言:OCR技术的新标杆 在数字化时代,文字识别技术已经成为连接物理世界与数字世界的重要桥梁。DeepSeek-OCR-2作为最新一代的开源OCR模型,凭借其创新的…...
NPU加速!DeepSeek-V3大模型极速体验攻略
NPU加速!DeepSeek-V3大模型极速体验攻略 【免费下载链接】DeepSeek-V3-0324-w4a8-mtp-QuaRot 项目地址: https://ai.gitcode.com/Eco-Tech/DeepSeek-V3-0324-w4a8-mtp-QuaRot 导语:DeepSeek-V3系列大模型推出NPU硬件加速版本,标志着大…...
提升开发效率的字体优化指南:Source Code Pro个性化配置实践
提升开发效率的字体优化指南:Source Code Pro个性化配置实践 【免费下载链接】source-code-pro Monospaced font family for user interface and coding environments 项目地址: https://gitcode.com/gh_mirrors/so/source-code-pro 长时间编码导致的视觉疲劳…...
安装即实战,用快马平台生成集成openclaw的数据采集与分析示例项目
最近在做一个数据采集相关的项目,需要用到openclaw这个工具。说实话,刚开始安装和集成的时候踩了不少坑,后来发现InsCode(快马)平台可以一键生成完整的实战项目,简直不要太方便。今天就把我的经验分享给大家,希望能帮到…...
智能仓储环境监控避坑指南:51单片机系统常见问题与解决方案
智能仓储环境监控避坑指南:51单片机系统常见问题与解决方案 在工业4.0时代,智能仓储系统的稳定运行直接关系到企业供应链效率。作为核心控制单元,51单片机以其高性价比和成熟生态,在中小型仓储环境监控中占据重要地位。然而实际部…...
避坑指南:用Python调用腾讯混元大模型API时,你可能会遇到的5个常见错误及解决方法
避坑指南:用Python调用腾讯混元大模型API时,你可能会遇到的5个常见错误及解决方法 调试API接口就像在迷宫中寻找出口——每个转角都可能遇到意想不到的障碍。作为使用腾讯混元大模型的开发者,我在过去三个月里处理了超过200次API调用异常&…...
GLM-OCR Python API详解:predict接口返回结构、置信度阈值设置与后处理
GLM-OCR Python API详解:predict接口返回结构、置信度阈值设置与后处理 1. 项目概述与环境准备 GLM-OCR 是一个基于先进多模态架构的高性能OCR识别模型,专门针对复杂文档理解场景设计。它不仅能识别常规文本,还支持表格识别、公式识别等高级…...
