Python语言基础知识详解:标识符与变量
Python语言基础知识详解:标识符与变量
一、标识符(Identifiers)
定义
标识符是用于命名变量、函数、类、模块或其他对象的名称。它是代码中对实体的唯一标识。
1. 标识符的命名规则
Python的标识符需遵循以下规则:
-
允许的字符
- 由字母(A-Z, a-z)、数字(0-9)和下划线(
_
)组成。 - 必须以字母或下划线开头,不能以数字开头。
- 区分大小写:
name
、Name
、NAME
是三个不同的标识符。
valid_names = ["age", "_count", "user1", "MAX_VALUE"] # 合法 invalid_names = ["2nd_var", "my-var", "class"] # 非法(数字开头、特殊字符、保留字)
- 由字母(A-Z, a-z)、数字(0-9)和下划线(
-
保留关键字(Keywords)
Python有35个保留关键字,不可作为标识符。例如:# 查看所有关键字 import keyword print(keyword.kwlist) # ['False', 'None', 'True', 'and', 'as', 'assert', ...]
-
命名约定
- PEP8规范:Python官方推荐的代码风格指南。
- 变量名:小写字母 + 下划线分隔(
snake_case
),如user_name
。 - 常量名:全大写 + 下划线分隔,如
MAX_SIZE
。 - 类名:首字母大写的驼峰式(
CamelCase
),如ClassName
。 - 函数名:同变量名,如
calculate_total()
。
- 变量名:小写字母 + 下划线分隔(
- 避免混淆:
- 不要使用小写
l
、大写O
等易混淆字符。 - 避免单下划线开头(
_var
)或双下划线开头(__var
)的特殊含义名称(除非明确用途)。
- 不要使用小写
- PEP8规范:Python官方推荐的代码风格指南。
2. 标识符的作用域与生命周期
- 作用域:标识符的有效范围(局部、全局、闭包)。
- 生命周期:标识符从创建到销毁的时间段,由作用域决定。
二、变量(Variables)
定义
变量是程序运行时存储在内存中的数据的引用(即标识符指向具体对象)。
1. 变量的声明与赋值
Python是动态类型语言,变量无需显式声明类型,直接赋值即可创建。
-
单变量赋值
a = 10 # 整型变量 name = "Alice" # 字符串变量 is_valid = True # 布尔型变量
-
多变量赋值
x, y, z = 1, 2, 3 # 同时赋值多个变量 a = b = c = 0 # 链式赋值(所有变量指向同一对象) x, y = y, x # 交换变量值(无需临时变量)
-
变量类型动态变化
var = 10 # 初始为整型 var = "Hello" # 重新赋值为字符串(合法)
2. 变量的本质:对象引用
Python变量本质是对象的引用(指针),而非存储数据本身。
- 不可变对象:赋值会创建新对象(如
int
,str
,tuple
)。 - 可变对象:赋值共享同一对象(如
list
,dict
,set
)。
# 不可变对象示例
a = 10
b = a # b和a指向同一个整数对象
a = 20 # 创建新对象20,a指向新对象,b仍为10# 可变对象示例
list1 = [1, 2]
list2 = list1 # list2和list1指向同一列表
list1.append(3) # 修改原列表,list2同步变化
print(list2) # 输出 [1, 2, 3]
3. 变量的作用域
Python作用域分为四层(由内到外):
- 局部作用域(Local):函数内部定义的变量。
- 闭包作用域(Enclosing):嵌套函数的外层作用域。
- 全局作用域(Global):模块级别定义的变量。
- 内建作用域(Built-in):Python内置的标识符(如
print
,len
)。
global_var = "Global" # 全局变量def outer():enclosing_var = "Enclosing" # 闭包作用域变量def inner():local_var = "Local" # 局部变量print(global_var) # 访问全局变量print(enclosing_var) # 访问闭包变量inner()outer()
global
关键字:在函数内部修改全局变量。nonlocal
关键字:在嵌套函数中修改闭包变量。
count = 0 # 全局变量def increment():global countcount += 1 # 修改全局变量def outer():x = 10def inner():nonlocal x # 声明x为闭包变量x += 5inner()print(x) # 输出15
4. 变量的内存管理
- 引用计数:Python通过引用计数自动回收内存。当引用计数为0时,对象被销毁。
- 垃圾回收(GC):处理循环引用等复杂情况。
import sys
a = []
print(sys.getrefcount(a)) # 输出引用计数(通常比实际多1)
三、常见问题与最佳实践
-
变量命名常见错误
- 使用保留字(如
class = 10
)。 - 使用无意义的名称(如
a
,x1
)。 - 大小写混淆(如
UserName
vsuserName
)。
- 使用保留字(如
-
变量作用域陷阱
- 未声明
global
直接修改全局变量(导致创建局部变量)。 - 闭包中未正确使用
nonlocal
。
- 未声明
-
最佳实践
- 明确性:变量名应清晰描述其用途(如
student_list
优于s
)。 - 避免全局变量:优先使用局部变量或类属性。
- 类型提示(Type Hints):Python 3.5+支持类型注解,增强代码可读性。
def greet(name: str) -> str:return f"Hello, {name}"
- 明确性:变量名应清晰描述其用途(如
四、总结
核心概念 | 关键点 |
---|---|
标识符规则 | 字母/下划线开头,区分大小写,避开保留字,遵循PEP8命名规范。 |
变量的本质 | 对象引用,动态类型,支持多变量赋值。 |
作用域管理 | 局部 > 闭包 > 全局 > 内建,使用 global 和 nonlocal 控制作用域。 |
内存管理 | 引用计数 + 垃圾回收机制,自动管理内存。 |
最佳实践 | 明确命名、避免全局污染、合理使用类型提示。 |
掌握标识符与变量的细节,是编写高效、可维护Python代码的基础。通过合理的命名和变量管理,能显著提升代码的可读性和协作效率。
相关文章:
Python语言基础知识详解:标识符与变量
Python语言基础知识详解:标识符与变量 一、标识符(Identifiers) 定义 标识符是用于命名变量、函数、类、模块或其他对象的名称。它是代码中对实体的唯一标识。 1. 标识符的命名规则 Python的标识符需遵循以下规则: 允许的字符 由…...
google chrome 中 fcitx5 候选框不跟随光标
我的电脑:ubuntu22.04,窗口系统:wayland 2025/4/26 号更新的谷歌浏览器 今天打开浏览器发现输入法的候选框固定在左上角不动了,一番折腾,发现解决办法如下: 在搜索框中输入 about:flags搜索 wayland&#…...
深入浅出提示词工程(结合 DeepSeek)
提示词工程 Prompt 即提示、指令,所以提示工程也叫「指令工程」 用户输入的问题称为 Prompt,本文主要探讨 System Prompt(我将其翻译成「系统预设」) 使用 Prompt 的目的 直接提问 如「我该学 Vue 还是 React?」&…...
OpenVLA:大语言模型用于机器人操控的经典开源作品
TL;DR 2024 年斯坦福大学提出的 OpenVLA,基于大语言模型实现机器人操控,代码完全开源。 Paper Notes Name:OpenVLA: An Open-Source Vision-Language-Action ModelURL:https://openvla.github.io/作者:斯坦福&#…...
数值分析、数值代数之追赶法
数值分析、数值代数之追赶法 MATLAB 中,diag 函数用法追赶法推导过程代码运行过程 MATLAB 中,diag 函数用法 在 MATLAB 中,diag 函数用于处理矩阵的对角线元素或创建对角矩阵。以下是其常见的用法: 1.提取矩阵的对角线元素 2.创…...
深入浅出JVM - Java架构师面试实战
深入浅出JVM - Java架构师面试实战 本文通过模拟一位拥有十年Java研发经验的资深架构师马架构与面试官之间的对话,深入探讨了JVM的核心知识点。涵盖内存结构、垃圾回收算法、垃圾回收器、内存调优工具及参数配置等关键领域。 第一轮提问 面试官: 马架…...
Qt网络数据解析方法总结
在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据。以下是详细步骤和示例: 1. 网络数据接收 使用QTcpSocket或QUdpSocket接收数据,通过readyRead()信号触发读取: // 创建TCP Socket并连接信号 QTcpSo…...
[AHOI2001] 质数和分解
import java.util.*;public class Main {static int[] ss new int[201];public static void main(String[] args) {Scanner sc new Scanner(System.in);while (sc.hasNextInt()) { int n sc.nextInt();int num 0; // 记录质数个数int[] dp new int[201];dp[0] 1;for (in…...
说一下Drop与delete区别
在数据库操作里,DROP与DELETE是两个重要且功能不同的命令,以下为你详细介绍二者的区别: 功能层面 DROP:此命令用于删除数据库、表、视图、索引等数据库对象。一旦执行,数据库对象就会被彻底删除,其定义和…...
基于云原生架构的后端微服务治理实战指南
一、引言:为什么在云原生时代更需要微服务治理? 在单体应用时代,开发和部署虽然简单,但随着系统规模的扩大,单体架构的维护成本急剧上升,部署频率受限,模块之间相互影响,最终导致系…...
后端响应巨量数据,如何优化性能?
WebSocket流式传输 fetch虚拟滚动 (渲染性能提升,一次性记载固定条数)分片滚动 fetch流式传输 async function streamData(url) {unction streamOutput(msg) {// 发送 POST 请求fetch(url, {method:"POST",body:JSON.stringify({ …...
《代码整洁之道》第4章 注释 - 笔记
注释的恰当用法是弥补代码表达意图时遭遇的失败,良好的代码,让读者看代码就能明白含义。 代码在变动,在演化。注释并不总是随之变动。不准确的注释比没有注释要坏的多。注释算的上是一种没办法去除的恶。 注释不能美化代码 与其花时间编写…...
闭包与装饰器(python)
此 Python 代码借助闭包构建了计算对数的函数。闭包指的是一个函数与其所引用的外部变量共同构成的一个整体。借助闭包,我们能够创建具有特定行为的函数,并且这些函数可以记住其创建时的环境。 代码详细分析 导入模块 python import math 导入 math …...
学成在线网页
技术:h5css,静态页面 主页: 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…...
AI测试工具Testim——告别自动化测试维护难题
随着人工智能技术的快速发展,AI测试工具正在成为提升软件研发效能的关键。每款AI的特性各有差异,今天,我们就给大家介绍一款专注于Web和移动应用的端到端的AI测试工具--Testim。 Testim的简介 官网地址:https://www.testim.io/ 简…...
【C++详解】C++入门(二)引用、内联函数、nullptr宏
文章目录 一、引用引用的概念和定义引用的功能引用的特性const引用const用法回顾权限的放大缩小const引用的功能 指针和引用的关系 二、内联函数三、nullptr补充结构体指针变量类型重定义 一、引用 引用的概念和定义 C祖师爷为了优化在部分场景中使用指针会出现的效率较低和比…...
8、HTTPD服务--CGI机制
目录 1、测试PHP页面 2、安装php软件 一、CGI机制介绍 1、测试PHP页面 [rootlocalhost ~]# cat /mp3/test1.php AAAAAAAAAAAAA <?phpphpinfo(); ?> 2、安装php软件 # yum install -y php # systemctl restart httpd php实际上是作为httpd的功能模块存在的 [r…...
层级时间轮的 Golang 实现原理与实践
一、引言 在高并发服务中,延时任务的管理是一个常见且重要的需求。比如 HTTP 请求超时、心跳检测、订单超时未支付提醒等场景,传统的 Timer 或 Heap 实现会带来 O(log n) 的复杂度,难以支撑百万级别的定时任务。 论文《Hashed and Hierarch…...
人类社会的第四阶段
本书的主旨是探讨一场新的权力革命,它将以20世纪民族国家的毁灭为代价, 解放出个体。创新,以前所未有的方式改变了暴力的逻辑,并且正在革新未来的 边界。如果我们的推论是正确的,你们正站在一场有史以来最宏大的革命的…...
Golang | Builder模式
Builder模式是一种创建型设计模式,用于分步骤构建复杂对象,尤其适用于构造过程复杂或需要多个配置选项的场景。将对象的构造过程与其表示分离,通过分步骤和链式调用的方式灵活创建对象,避免构造函数的参数爆炸,提升代码…...
C#本地使用离线ocr库识别图片中文本,工具包PaddleOCRSharp
C#本地使用离线ocr库识别图片文本,工具包PaddleOCRSharp PaddleOCRSharp介绍 项目地址:https://github.com/raoyutian/PaddleOCRSharp PaddleOCRSharp 是一个.NET版本OCR可离线使用类库。项目核心组件PaddleOCR.dll目前已经支持C\C、.NET、Python、Go…...
Flutter 在 Dart 3.8 开始支持 Null-Aware Elements 语法,自动识别集合里的空元素
近日,在 Dart 3.8 的 changelog 里正式提交了 Null-Aware Elements 语法,该语法糖可以用于在 List、Set、Map 等集合中处理可能为 null 的元素或键值对,简化显式检查 null 的场景: /之前 var listWithoutNullAwareElements [if …...
3、Linux操作系统下,linux的技术手册使用(man)
linux系统内置技术手册,方便开发人员查阅Linux相关指令,提升开发效率 man即是manual的前三个字母,有时候遇事不决,问个人(man) 其在线网址为:man 还有man网站的作者写的书,可以下…...
Python 自动化办公:Excel 数据处理的“秘密武器”
引言 在日常的 IT 办公场景里,Excel 是数据处理与分析的 “常胜将军”。无论是财务人员整理账目、销售团队统计业绩,还是运营人员分析用户数据,Excel 都发挥着关键作用。但面对海量数据,手动操作 Excel 不仅效率低下,还…...
通过数据增强打造抗噪音多模态大模型
下载前面 想象一下,你正在一个嘈杂的咖啡馆里,想让身边的AI助手帮你预定一张电影票。或者,你在熙熙攘攘的街道上,需要语音导航带你找到目的地。在这些真实的场景中,语音交互面临着一个巨大的挑战——噪音。 背景噪音、他人说话声、设备本身的电流声……这些无处不在的干…...
Node.js API 安全的主要策略:最佳实践
了解 Node.js API 安全性 保护 Node.js API 的安全需要了解潜在的漏洞并采取措施来缓解这些漏洞。这类 API 通常遇到的常见威胁包括: SQL 注入**:**操纵用户输入以针对数据库执行恶意 SQL 代码。跨站点脚本**(XSS):**将恶意脚本注入其他用户查看的网页。跨站请求伪造**(CSR…...
如何删除Google Chrome中的所有历史记录【一键清除】
谷歌浏览器记录了用户访问过的网站。这方便了查找,但有时也需要清理。删除所有历史记录很简单,只要按照以下步骤操作。 1. 打开谷歌浏览器 首先要启动谷歌浏览器。点击右上角的三个点,进入主菜单。 2. 进入历史记录界面 在菜单中找到“历史…...
计算机三大主流操作系统的前世今生 - Linux|macOS|Windows
全文目录 1 引言2 起源之路2.1 Linux 起源2.2 macOS 起源2.3 Windows 起源 3 综合解析3.1 Linux系统综合解析3.1.1 系统定义与核心架构3.1.2 发展历程3.1.3 核心特点3.1.4 主流发行版3.1.5 应用场景 3.2 macOS系统综合解析3.2.1 系统定义与核心架构3.2.2 发展历程3.2.3 核心特点…...
大数据学习栈记——Hive4.0.1安装
本文介绍大数据技术中数据仓库Hive的安装配置,版本:Hive4.0.1,Ubuntu24.04。 Hive简介 Hive由 Facebook 开源用于解决海量结构化日志的数据统计工具。 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据…...
8.Excel:数据验证和下拉列表
一 数据验证 1.作用 限制用户输入单元格的值。 补充:数据验证要先设置验证才会起作用,对于已经填写完成的表格来说,可以快速找到不符合的数值。 选中整列,然后设置数据验证。 然后圈释无效数据,不符合的会被圈出来 2.如…...
【机器学习-线性回归-4】线性回归中的最优解:从数学原理到实践应用
在机器学习的世界里,线性回归就像是一把瑞士军刀——简单却功能强大。无论是预测房价、分析销售趋势,还是研究变量间的相关性,线性回归都是数据科学家首选的入门算法。但你是否曾好奇过,这个看似简单的算法背后,是如何…...
《代码整洁之道》全书归纳
如果要把这本书最关键、最核心、被反复提及和强调的重点提炼出来,那就是: 可读性高于一切: 你的代码是给人读的,让它像一篇清晰的文章一样易于理解。表达意图是关键。短小、单一: 函数要短小,类要短小&…...
项目代码生成工具
代码生成工具 文章目录 代码生成工具提取公共类domainbodtoentityvoBean基类 代码生成工厂连接配置模版1、基础类基类Entity添加DTO类分页查询DTO基础查询DTO修改DTO视图VO 2、controller2、service接口3、service实现类4、Mapper接口5、Mapper的xml文件 提取公共类 比方说每个…...
【机器学习驱动的智能化电池管理技术与应用】
在人工智能与电池管理技术融合的背景下,电池科技的研究和应用正迅速发展,创新解决方案层出不穷。从电池性能的精确评估到复杂电池系统的智能监控,从数据驱动的故障诊断到电池寿命的预测优化,人工智能技术正以其强大的数据处理能力…...
【MySQL 】MySQL 安装自记录全程-详细 (mysql-installer-community-8.0.42.0.msi)
看了一些别人的文章,其实还有些困惑,根据不少都有一些跟我遇到的不太一样,记录一下自己的安装过程 MySQL 安装(Windows) 下载 MySQL 安装包 MySQL数据库官网链接 MySQL (MySQL的https://www.mysql.com/ …...
构建事件驱动的云原生后端系统 —— 从设计到实践
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为什么需要事件驱动架构? 在现代互联网应用中,系统规模越来越大,功能模块越来越复杂,用户行为越来越不可预测。 传统的同步调用、强耦合的后端架构,面对大规模并发、高频变化、复杂交…...
时间复杂度和空间复杂度 [数据结构 初阶]
目录 算法效率 1. 时间复杂度 1.1 时间复杂度概念 1.2 大O 的渐进表示法 1.2.1 计算 func1 的基本操作执行了多少次 1.3 推导 大O 阶方法 2. 空间复杂度 算法效率 // 算法效率分析分为两种: 1) 时间效率: 时间复杂度, 用来衡量一个算法的运行速度; 2) 空间效率: 空间复…...
SpringMVC 通过ajax 前后端数据交互
在前端的开发过程中,经常在html页面通过ajax进行前后端数据的交互,SpringMVC的controller进行数据的接收,但是有的时候后端会出现数据无法接收到的情况,这个是因为我们的参数和前端ajax的contentType参数 类型不对应的情景&#x…...
Qt从零开始(1)了解
文章目录 1. Qt技术介绍2. 开发GUI的选择3. 框架的介绍4.Qt发展历程(简单介绍)5. Qt支持的系统6. Qt开发方式7.Qt优点总结 简介:这篇文章简单介绍下Qt的相关知识与应用场景,随便看看,了解了解即可。如果介绍有误或者描…...
当元数据遇见 AI 运维:智能诊断企业数据资产健康度
在数字化浪潮席卷全球的当下,企业数据资产规模呈指数级增长,然而传统数据监控方式却逐渐暴露出诸多弊端。想象一下,在某头部电商的晨会上,数据工程师小王正经历职业生涯最尴尬的时刻:“昨天促销活动的 UV 数据为什么比…...
关于OCP认证:有Oracle和MySQL两种
认证针对的数据库系统 MySQL OCP:是 Oracle 公司针对 MySQL 数据库管理员和开发者设计的认证,主要验证持证者在 MySQL 数据库管理、优化及安全等方面的技术能力。MySQL 是开源的关系数据库管理系统,以其简单、高性能和灵活性在中小型企业及开…...
Macos m系列芯片环境下python3安装mysqlclient系列问题
最近学习python3,在安装mysqlclient的时候遇到了一些问题,直接使用哦pip install mysqlclient 直接报错了,记录一下解决方案。 环境信息 设备:Macbook Pro m1 系统:macos Sequoia 15.3.2 最终成功的python版本…...
《代码整洁之道》第7章 错误处理 - 笔记
得墨忒耳定律 不要链式调用, 如 a.getB().getC().doSomething()。 直接获取对象调用方法 数据传输对象(DTOs) DTO (Data Transfer Object): 数据传输对象。这是一种典型的数据结构。 里面没有任何业务逻辑代码。它的唯一作用就…...
java-mybatis01
对象/关系映射ORM ORM完成面向对象的编程语言DAO关系数据库的映射后,开发人员可以利用面向对象设计语言的建议易用性,也可利用关系数据库的技术优势。 ORM把关系数据库包装成面向对象的模型,采用ORM框架后,应用程序不再直接访问底…...
单片机之间的双向通信
具体功能实现 甲单片机通过按键可以控制乙单片机的LED灯,而乙单片机通过可以让连接甲单片机的数码管数字自增加一。 定时器资源 3个定时器 中断系统 执行现程序的过程中,出现某些急需处理的异常情况或特殊请求,cpu暂时中止现行程序&…...
量子纠缠式架构:当微服务同时存在于所有节点时,CAP定理是否依然成立?
一、CAP定理的经典困境 1. 传统分布式系统的三维束缚 经典权衡案例: 系统类型选择代价银行核心系统CP故障时拒绝服务社交网络AP短暂数据不一致物联网平台CA网络中断即崩溃 二、量子纠缠的降维打击 1. 量子微服务的超距同步 # 量子纠缠服务示例(Qiski…...
使用rsync和inotidy-tools来进行实时备份文件夹数据
在工作中遇到这个这么个需求,就是我们有一个samba的文件共享服务器,里面存了很多文件,然后我想实时备份这个samba共享文件的。 1、概述 只需要在源服务器上操作,并在源服务器上安装好rsync和inotidy-tools,目标服务器…...
Spring AI 实现智能对话
1. 实现效果 2. Spring Boot 3 后端 2.1 pom.xml <!-- 管理包依赖。通过 Spring AI 的 BOM 文件统一管理所有 Spring AI 相关依赖的版本,确保版本一致性,减少冲突 --><dependencyManagement><dependencies><!-- Spring AI -->…...
2025 网络安全技术深水区探索:从 “攻防对抗” 到 “数字韧性” 的范式跃迁
引言:当攻击成本趋近于零,防御逻辑必须重构 2025 年,网络安全领域正经历三重根本性变革: 攻击者门槛坍缩:生成式 AI 将网络钓鱼开发效率提升 300%,勒索软件即服务(RaaS)订阅用户突破…...
学习笔记—双指针算法—移动零
双指针算法 移动零 283. 移动零 - 力扣(LeetCode) 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进…...