当前位置: 首页 > news >正文

第9章 函数-9.6 变量作用域

一个程序中的所有变量并不是在哪个位置都可以正常访问,其访问权限取决于变量定义的位置,在不同位置定义的变量,它的作用域是不同的。

变量作用域指的就是变量的有效范围,即变量可以在哪个范围内使用。有些变量可以在整段代码中的任意位置使用,有些变量却只能在函数内部使用。

变量作用域可以分为局部变量和全局变量。

9.6.1 局部变量

在函数内部定义的变量,称之为局部变量。局部变量的作用域仅限于函数内部,函数外部是无法使用的。此外,函数的参数也属于局部变量,所以只能在函数内部使用。示例代码如下:

# 资源包\Code\chapter9\9.5\0920.py def myFunc(age): name = 'Python全栈开发-基础入门' return (f'函数内部:{name}-{age}') tp = myFunc(38) print(tp) # 报错,因为变量name和变量age为局部变量 print(f'函数外部:{name}-{age}')

9.6.2 全局变量

在函数外部定义的变量,称之为全局变量。全局变量的作用域是整个程序,即全局变量可以在各个函数的外部使用,也可以在各个函数的内部使用。

定义全局变量有以下2种方式:

(1)在函数体外定义变量。

在函数体外定义的变量,一定是全局变量。示例代码如下:

# 资源包\Code\chapter9\9.5\0922.py teach = 'Python' def myFunc(): return (f'函数内部:{teach}') tp = myFunc() print(tp) print(f'函数外部:{teach}')

(2)在函数体内使用global关键字定义变量。

使用global关键字对函数体内的变量进行修饰,则该变量就变为全局变量。示例代码如下:

# 资源包\Code\chapter9\9.5\0923.py def myFunc(): # 将局部变量声明为全局变量 global teach teach = 'Python' return (f'函数内部:{teach}') tp = myFunc() print(tp) print(f'函数外部:{teach}')

9.6.3 获取指定作用域中的变量值

Python提供了3个函数,即globals()函数、locals()函数和vars()函数,用于在一些特定的应用场景中,获取某个作用域内的所有变量。

(1)globals()函数。

该函数用于返回一个包含全局范围内所有变量的字典,该字典中的键为变量名称,值为该变量所对应的值。示例代码如下:

# 资源包\Code\chapter9\9.5\0924.py name = 'Python全栈开发-基础入门' def myFunc(): global teach teach = 'Python' age = 35 return None myFunc() print(globals())

上述代码的运行结果如图9-2所示,这里需要注意的是,globals()函数返回的字典中,会默认包含众多全局变量,除了自定义的全局变量之外,其余的都是Python主程序内置的全局变量。

图9-2 globals()函数返回的字典中所包含的全局变量

另外,通过使用globals()函数返回的字典,不仅可以访问指定的全局变量的值,甚至还可以修改该全局变量的值。示例代码如下:

# 资源包\Code\chapter9\9.5\0925.py name = 'Python全栈开发-基础入门' def myFunc(): global teach teach = 'Python' age = 35 return None myFunc() print(f'修改前的值为:{globals()["teach"]}') globals()['teach'] = 'Java' print(f'修改后的值为:{teach}')

(2)locals()函数。

该函数用于返回一个包含当前作用域内所有变量的字典,即当在函数内部调用locals()函数,其会返回一个包含所有局部变量的字典;而在全局范围内调用locals()函数,则会返回一个包含所有全局变量的字典,此时其功能与globals()函数相同。示例代码如下:

# 资源包\Code\chapter9\9.5\0926.py name = 'Python全栈开发-基础入门' def myFunc(): global teach teach = 'Python' age = 35 print(f'函数内的局部变量:{locals()}') return None myFunc() print(f'全局范围内的全局变量:{locals()}')

上述代码的运行结果如图9-3所示,这里需要注意的是,当在全局范围内调用locals()函数,其返回的字典中会默认包含众多的全局变量,除了自定义的全局变量之外,其余的都是Python主程序内置的全局变量。

图9-3 locals()函数返回的字典中所包含的局部变量和全局变量

另外,在函数内通过使用locals()函数返回的字典,仅可以访问指定的局部变量的值,但无法修改该局部变量的值;而在全局范围内通过使用locals()函数返回的字典,不仅可以访问指定的全局变量的值,还可以修改该全局变量的值。示例代码如下:

# 资源包\Code\chapter9\9.5\0927.py name = 'Python全栈开发-基础入门' def myFunc(): age = 35 print(f'局部变量修改前的值为:{age}') locals()['age'] = '66' # 函数内无法修改 print(f'局部变量修改后的值为:{age}') return None myFunc() print(f'全局变量修改前的值为:{name}') locals()['name'] = 'Python全栈开发-高阶编程' # 全局范围内可以修改 print(f'全局变量修改后的值为:{name}')

(3)vars()函数。

由于读者目前还未学习Python类和对象的相关知识,因此暂时可以先跳过该函数的学习,待学习完Python类和对象的相关知识之后,再回来学习该函数。

vars()函数用于返回一个指定对象范围内所有变量所组成的字典,注意,参数必须为对象,如果不传入参数,则vars()函数和locals()函数的作用完全相同。示例代码如下:

# 资源包\Code\chapter9\9.5\0928.py name = "Python全栈开发-基础入门" teach = "Python" class MyClass(): other_name = "Python全栈开发-高阶编程" other_teach = "Data Analysis" print(f"有参数:{vars(MyClass)}") # 无参数时,功能同locals()完全相同 print(f"无参数:{vars()}")

上述代码的运行结果如图9-4所示。

图9-4 vars()函数返回的字典中所包含的变量

http://www.jsqmd.com/news/635453/

相关文章:

  • MediaCrawler:5大社交平台数据采集终极指南(2024企业级实战)
  • 2026年国内断桥推拉窗厂家实力推荐,选窗不再迷茫,工程门窗/伟昌铝型材/兴发铝型材,断桥推拉窗源头厂家找哪家 - 品牌推荐师
  • AIAgent视觉导航不再依赖GPS:2026奇点大会发布的轻量化VLM-Nav架构,端侧推理仅需1.2W功耗
  • Bluesnooze 与 Apple Watch 解锁功能:兼容性分析与替代方案
  • 别再为换行符头疼了!Windows下Git安装时那个“神秘”选项到底怎么选?
  • 2026营口整装行业口碑标杆名录 本地头部服务商解析 - 真知灼见33
  • DOTA数据集解析:航空影像目标检测的关键挑战与解决方案
  • 终极Reddit数据归档工具bulk-downloader-for-reddit:支持20+内容源深度解析
  • 售后服务群总被封?融云IM:让客户消息掌握在自己手中 - AI冲冲冲
  • 3个隐藏技巧,让你的macOS鼠标指针从此与众不同
  • 3个核心技巧:如何用猫抓浏览器扩展轻松获取任何在线媒体资源
  • 宝马X4/X5/X6/X7发动机对比:厂家专业性、性能与供应商选择 - 品牌推荐大师1
  • 2026年4月口碑好的钣金加工制造厂家推荐,国内钣金加工厂商哪家靠谱解析品牌实力与甄选要点 - 品牌推荐师
  • 基于MPC模型预测控制的空调加热器温度调节系统及其实现程序带文献参考
  • 从时钟模式到主从联动:STM32定时器配置的实战解析
  • Electron开发避坑指南:解决菜单、热更新、安全警告和打包的那些“坑”
  • Qwen3-TTS-VoiceDesign惊艳效果:‘葡萄牙语法多悲情吟唱’‘西班牙语弗拉门戈击掌节奏’融合生成
  • weqrwqg
  • LangChain与LangGraph技术选型指南(非常详细),大模型开发从入门到精通,看这一篇就够了!
  • 如何用OpCore Simplify一键搞定黑苹果安装?终极OpenCore EFI配置指南
  • Can通信矩阵DBC文件制作Autosar开发流程
  • RMBG-2.0本地隐私抠图方案:零网络依赖、纯离线运行实操手册
  • Local SDXL-Turbo应用场景:IP形象设计中多角度草图同步生成验证
  • 解决LangChain4j流式输出中文乱码:从编码配置到React前端渲染的完整避坑指南
  • 收藏 | RAG 核心认知:是什么、有哪些形态,小白也能看懂的大模型知识增强秘籍
  • 3个简单步骤掌握Sabaki:优雅围棋软件的终极使用指南
  • 陕西旅游吃什么?棒棒鱼鱼火锅,咸阳起家的必吃老味道 - 深度智识库
  • Noto字体:终结多语言显示碎片化的全栈解决方案
  • 3分钟掌握:如何安全高效地将Stable Diffusion模型转换为Safetensors格式
  • Uformer架构解析:基于Transformer的高效图像复原模型实现原理与优化策略