尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

30 Seconds of Code 解读:Python 变量交换的 3 种实用方法

30 Seconds of Code 解读:Python 变量交换的 3 种实用方法 教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载本指南基于 swap-variables.md 一文系统讲解 Python 中交换两个变量值的三种方法临时变量法、元组打包/解包法无需临时变量与算术运算法仅限数字。读完本文你将掌握每种方法的完整写法、底层原理与适用场景并能根据数据类型的差异在真实项目中做出正确选择。三种方法均属于该仓库 Python 系列Python 集合面向 Python 3.6的基础变量操作技巧可直接用于日常编码。方法一使用临时变量temp variable这是最直观、也是最经典的交换方式借助第三个变量temp暂存其中一个变量的值再依次完成赋值。其核心思路分三步先把a的值暂存到temptemp a再把b的值赋给aa b最后把暂存在temp中的原值赋给bb temp。a 11 b 7 temp a a b b temp print(a) # 7 print(b) # 11执行过程拆解语句a 的值b 的值temp 的值初始化117—temp a11711a b7711b temp71111适用性与局限该方法对任意数据类型数字、字符串、列表、字典、自定义对象等都成立是三类方法中通用性最强的一种。缺点是需要额外开辟一个临时变量略显冗长。方法二无需临时变量——元组打包与序列解包Tuple swapPython 提供了一种语法层面的优雅解法直接写a, b b, a完全不需要第三个变量。这背后的机制由两个语言特性支撑元组打包tuple packing用逗号分隔多个值即可构造元组例如b, a在求值后会打包成元组(b, a)序列解包sequence unpacking将逗号分隔的目标变量放在赋值语句左侧会按顺序把右侧序列中的元素依次解包到这些变量中例如a, b ...会把右侧第一个值赋给a、第二个值赋给b关键求值顺序Python 会先求值赋值语句的右侧RHS再执行左侧LHS赋值。因此右侧先把(b, a)快照成元组左侧再依序解包完成交换。a 11 b 7 a, b b, a print(a) # 7 print(b) # 11可扩展到多个变量这一特性决定了该写法天然支持超过两个变量的交换与排列——只要左右两侧的变量数量一致即可。例如三个变量的一次轮转a, b, c 1, 2, 3 a, b, c c, a, b print(a) # 3 print(b) # 1 print(c) # 2甚至无需中间元组变量就能完成一次整体轮转。这正是 Python 相比多数语言在“置换permutation”场景下更简洁的原因。补充说明元组与列表在可变性、内存占用上的差异可参考仓库中的 lists-tuples.md而如果需要在交换的同时保留字段名语义可进一步了解 named-tuples.md。本方法同样适用于任何数据类型是实际项目中最推荐的写法。方法三仅限数字——利用算术运算符交换如果两个变量都是数字还可以用加法/减法/-或乘法/除法*//完成交换原理是借助“和”与“差值”的数学关系来回推原值。以加减法为例a 11 b 7 a a b # a 18, b 7 b a - b # a 18, b 11 a a - b # a 7, b 11 print(a) # 7 print(b) # 11逐步推演语句数学含义a 的值b 的值初始化—117a a ba 变为总和187b a - bb 总和 − 原 b 原 a1811a a - ba 总和 − 原 a 原 b711适用性与局限仅适用于数字类型整数、浮点数使用乘法/除法*//时需保证除数不为 0对于浮点数加减运算可能引入微小的精度误差由于 Python 的int是无界大整数Python 3 自动升级为大整数加减法在 Python 中不会出现其他语言里常见的整数溢出问题逻辑清晰度低于前两种方法可读性较差适合在追求“零额外变量、零临时对象”的极简场景下使用。三种方法对比与选型建议方法语法适用类型是否需临时变量可读性推荐度临时变量法temp a; a b; b temp任意类型是高通用兜底元组解包法a, b b, a任意类型否最高首选推荐算术运算法a a b; ...仅数字否低特殊场景选型建议默认优先使用元组解包法一行完成、语义清晰、无类型限制这也是 Python 社区的事实标准写法当需要强调“不创建任何额外对象”或处于对临时对象敏感的嵌入式/高性能场景时再考虑算术法仅数字临时变量法虽略显繁琐但在教学讲解、与不支持解包的旧代码风格对齐时仍有价值。结语变量交换是编程中最高频的基础操作之一。本文介绍的三种方法覆盖了“通用稳妥”“语法优雅”“极致精简”三条路线日常开发推荐元组解包法通用兜底用临时变量法数字极简场景可用算术运算法。掌握这些写法能帮助你在阅读与编写 Python 代码时一眼识别常见的交换与置换模式。仓库中的该系列文章以短小精悍的实战技巧为主相关变体如元组与列表差异、具名元组可在 Python 集合 下继续探索。赞分享教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载相关推荐30-seconds-of-code 实战解析JavaScript 清空数组的四种方法及引用陷阱30 seconds of code 实战解析JavaScript 清空数组的四种方法及引用陷阱 数组是 JavaScript 中最常用的数据结构之一而如教程文档30-seconds-of-code 实战JavaScript 对象添加键值对的五种方法全解析30 seconds of code 实战JavaScript 对象添加键值对的五种方法全解析 在 JavaScript 中为对象添加键值对是一项基础却高频教程文档30 seconds of Python代码重构提升代码质量的实用方法30 seconds of Python代码重构提升代码质量的实用方法 你是否经常遇到代码冗长、可读性差、难以维护的问题本文将介绍基于30 seconds教程文档上一篇如何快速提升AMD显卡性能免费驱动精简终极指南下一篇Nuke Survival Toolkit实战指南150个高效插件重构专业合成工作流创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表