Python系列(5)—— 作用域

Python的四种作用域详解

在Python编程语言中,变量的作用域描述了变量在代码的哪个部分是活跃的,即可见和可访问的。Python主要支持四种类型的作用域:局部(Local)、嵌套局部(Enclosing)、全局(Global)和内置(Built-in)。

1. 局部作用域(Local)

局部作用域也称作函数作用域,指的是在函数或方法内部定义的变量。这些变量仅在其定义的函数或方法内部可见,并且当函数执行完毕后,这些变量会被销毁。

代码示例:

def my_function():local_var = "I'm local"print("Local scope:", local_var)my_function()  # 输出: Local scope: I'm local
print(local_var)  # 报错: NameError: name 'local_var' is not defined

2. 嵌套局部作用域(Enclosing)

嵌套局部作用域是指在嵌套函数(内嵌函数)中,可以访问其外层非全局作用域的变量。这种作用域在闭包中特别有用。

代码示例:

def outer_function():enclosing_var = "I'm from enclosing scope"def inner_function():print("Enclosing scope:", enclosing_var)inner_function()  # 内嵌函数调用outer_function()  # 输出: Enclosing scope: I'm from enclosing scope

注意:在上面的例子中,inner_function可以访问outer_function的变量enclosing_var,但它无法修改这个变量(除非使用nonlocal关键字)。

3. 全局作用域(Global)

全局作用域是指在Python脚本的主体部分定义的变量。这些变量在整个脚本中都是可见的,并且可以被脚本中的任何函数访问。

代码示例:

global_var = "I'm global"def my_function():print("Global scope:", global_var)my_function()  # 输出: Global scope: I'm global
print("Global scope:", global_var)  # 输出: Global scope: I'm global

如果需要在函数内部修改全局变量,必须使用global关键字。

4. 内置作用域(Built-in)

内置作用域包含了Python语言自带的函数和变量,如open, print, len等。这些内置函数和变量总是可用的,无需导入任何模块。

代码示例:

print("Built-in function:", len("hello"))  # 输出: Built-in function: 5

在上面的例子中,printlen都是内置作用域中的函数。

总结

  • Python支持四种作用域:局部、嵌套局部、全局和内置。
  • 局部作用域中的变量仅在其定义的函数或方法内部可见。
  • 嵌套局部作用域允许内嵌函数访问其外层非全局作用域的变量。
  • 全局作用域中的变量在整个脚本中都是可见的。
  • 内置作用域包含了Python自带的函数和变量。

了解这些作用域对于编写清晰、可维护的代码至关重要。在实际编程中,应该尽量减少全局变量的使用,以避免潜在的命名冲突和难以调试的错误。通过合理地组织代码和传递参数,可以更有效地利用Python的作用域规则。

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

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

相关文章

【JavaEE】文件操作 —— IO

文件操作 —— IO 1. 文件的属性 文件内容文件大小文件路径文件名称 2. 文件的管理 采用树形结构进行管理。 3. 文件路径 分为两种:相对、绝对路径。 相对路径:相对于当前位置的路径,以“./xxx.xxx”为标志绝对路径:以从盘符…

安装Ubuntu系统详细教程

一. 前言 本篇文章详解介绍一下如何安装Ubuntu系统,笔者在安装的过程中踩过很多坑,重装了很多次,现在把安装过程中遇到的问题也列出来,供大家参考。 二. 准备工作 这个环节很重要,工欲善其事&#xf…

手动导入jar包到Maven的解决方案(简单有效!)

想要导入一个jar包到项目中,这个jar包在Maven中没有可以尝试以下方式。 第一步 先找到你maven的本地仓库,我的仓库就在这里,你可以根据你安装的maven找到你的目录 第二步 根据坐标创建文件夹。 这个依赖modbus4j.jar,Maven远…

数据库SQL查询相关练习

第一题:表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10) NOT NULL D…

PyQt ------ QTextEditor

PyQt ------ QTextEditor 引言正文示例1------进阶示例 引言 这里给大家介绍一下 PyQt6 中的 QTextEditor 组件用法。 正文 QTextEditor 可以进行多行字符串输出的组件。 想要获取 QTextEditor 组件中当前存放的字符串,需要使用: QTextEditor.toPla…

《GreenPlum系列》GreenPlum初级教程-GreenPlum详细入门教程

文章目录 GreenPlum详细入门教程第一章 GreenPlum介绍1.MPP架构介绍2.GreenPlum介绍3.GreenPlum数据库架构4.GreenPlum数据库优缺点 第二章 GreenPlum单节点安装1.Docker创建centos容器1.1 拉取centos7镜像1.2 创建容器1.3 进入容器1.4 容器和服务器免密操作1.4.1 生成密钥1.4.…

idea创建公用依赖包项目

创建parent项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/…

OceanBase使用规范

规约制定背景: 降低故障率和维护成本 适用范围: 所有使用OceanBase的数据库 【分区表设计建议】 关于分区表创建时的注意事项。 。 单表行数可能超过10亿行或者单表容量超过200GB,推荐进行创建分区表。 。如果预计三年后的数据量根本达不到这个级别,请不要在创建表时使用分…

服务器管理平台(6)- Utils

Utils 本篇为服务器管理平台的结篇&#xff0c;讲述一些必要的Util&#xff0c;如钉钉告警、安全加密、远程登录等功能的实现 1、钉钉告警 1.1、SQL配置告警规则 逻辑磁盘容量已使用比例超过90% 超过30天未登录 字段名称字段类型解释Idint自增IDTablestring监测表名Metri…

matlab appdesigner系列-常用18-表格

表格&#xff0c;常用来导入外部表格数据 示例&#xff1a; 导入外界excel数据&#xff1a;data.xlsx 姓名年龄城市王一18长沙王二21上海王三56武汉王四47北京王五88成都王六23长春 操作步骤如下&#xff1a; 1&#xff09;将表格拖拽到画布上 2&#xff09;对app1右键进行…

GPSR路由算法的MATLAB实现

GPSR基于节点地理位置路由信息&#xff0c;采用贪婪策略和右手准则的结合在邻居节点中选择下一跳节点进行数据转发。节点在进行路由选择时&#xff0c;只需知道自己、邻居和目标节点的地理位置信息&#xff0c;无需维护全局网络的链路状态&#xff0c;这在很大程度上降低了网络…

高质量简历模板网站,免费、免费、免费

你们在制作简历时&#xff0c;是不是基本只关注两件事&#xff1a;简历模板&#xff0c;还有基本信息的填写。 当你再次坐下来更新你的简历时&#xff0c;可能会发现自己不自觉地选择了那个“看起来最好看的模板”&#xff0c;填写基本信息&#xff0c;却没有深入思考如何使简历…

基于 Docker 部署 Pingvin Share 文件共享平台

一、Pingvin Share 介绍 Pingvin Share 简介 Pingvin Share 是自托管文件共享平台&#xff0c;是 WeTransfer 的替代方案。 Pingvin Share 特点 在 2 分钟内启动您的实例使用可通过链接访问的文件创建共享没有文件大小限制&#xff0c;只有你的磁盘是你的限制设置共享到期时间…

C++11新特性:final/override控制

override关键字 用于显式标识一个成员函数&#xff08;通常是虚函数&#xff09;是在派生类中重写&#xff08;覆盖&#xff09;了基类中的虚函数。这有助于提高代码的可读性&#xff0c;同时在编译时提供了检查&#xff0c;确保派生类中的函数确实是在基类中有对应的虚函数。…

GZ036 区块链技术应用赛项赛题第3套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷&#xff08;3卷&#xff09; 任 务 书 参赛队编号&#xff1a; 背景描述 新能源作为新兴领域&#xff0c;产业呈现碎片化与复杂化的特性&#xff0c;逐渐出现管理困难、供应链金融、可信监管与数…

论文阅读_训练大模型用于角色扮演

英文名称: Character-LLM: A Trainable Agent for Role-Playing 中文名称: 角色-LLM&#xff1a;训练Agent用于角色扮演 文章: [https://arxiv.org/abs/2310.10158](https://arxiv.org/abs/2310.10158) 作者: Yunfan Shao, Linyang Li, Junqi Dai, Xipeng Qiu 机构: 复旦大学…

军事智能中的深度强化学习不同于传统的深度强化学习

在军事智能中&#xff0c;“诡”和“诈”是两个最重要的概念。 “诡”变指的是智能体通过采取一些不可预测或复杂的变化策略来获得优势。诡变可能包括逃避对手的观察或引诱对手采取不利的行动。智能体可以使用诡变来欺骗对手&#xff0c;使其做出错误的决策或暴露其策略。 “诈…

动态规划最后一天(回文串)

目录 647. 回文子串 看到题目的第一想法 看到代码随想录之后的想法 自己实现过程中遇到的困难(看代码) 516.最长回文子序列 看到题目的第一想法 看到代码随想录之后的想法 自己实现过程中遇到的困难(看代码) 647. 回文子串 力扣题目链接…

【第七在线】智能商品计划:重塑服装行业的供应链管理

在当今快速变化的市场环境中&#xff0c;供应链管理已成为企业成功的关键因素之一。尤其在服装行业&#xff0c;供应链的效率、灵活性和透明度直接影响着企业的竞争力和盈利能力。随着技术的发展&#xff0c;智能商品计划正逐渐成为重塑供应链管理的强大工具。 一、智能商品计划…

什么是JMeter?我们为什么要用JMeter做性能测试

什么是JMeter&#xff1f;我们为什么要用JMeter做性能测试 什么是JMeter&#xff1f;为什么选择JMeterJMeter的优点JMeter是如何工作的 什么是JMeter&#xff1f; Apache JMeter TM是纯Java开源软件&#xff0c;最初由Apache软件基金会的Stefano Mazzocchi开发&#xff0c;旨在…