Python12:核心语法-数据存储与运算-变量案例(变量交换)
完成如下需求1、现有两个变量分别为a 10, b 20现需要将这两个变量值交换然后输出到控制台。a 10 b 20 c a # c 10 a b # a 20 b c # b 10 print(a, b)练习现有三个变量分别为a 100, b 200, c 300现需要将这三个变量值进行交换将a,b,c的值分别赋值给c,a,b并将其输出到控制台。# 方法1使用临时中间变量 a 100 b 200 c 300 # 先保存原始a的值防止被覆盖 temp a a b b c c temp print(a, b, c) # 200 300 100 # 方法2Python的多变量同时赋值 # Python支持一次性解包赋值右边全部先算旧值再统一赋值左边不需要临时变量。 a 100 b 200 c 300 a, b, c b, c, a print(a, b, c) # 200 300 100重点讲解a,b,c b,c,a 执行逻辑会先把右边所有变量的旧数值全部读取保存下来再一次性分配给左边变量不会出现 “a 改完之后后面拿的 a 已经是新值” 的问题。1、什么叫「多变量同时解包赋值」a, b, c b, c, a等号右边b, c, a这是创建一个元组tuple(200, 300, 100)等号左边a, b, c是一组变量。解包把右边元组里面每一个元素依次拆开分别赋值给左边每一个变量。语法简写写b,c,a等价于(b,c,a)括号可以省略。 这种写法就叫序列解包赋值可以一行同时给多个变量赋值。2、“右边全部先算旧值”——旧值存在哪里重点执行a, b, c b, c, a的完整步骤⚠️注意不是先把 b 赋给 a再拿已经变化的a去做后面计算不是分步执行步骤1先完整计算等号右侧所有表达式把结果打包成临时元组存到一块****临时内存栈上的临时对象。 此时变量还完全没有被修改 原来a100b200c300计算右侧b,c,a→ 取出此时的旧值生成临时元组(200, 300, 100)这个元组就是“旧值的临时存放地”是Python内部的临时对象你代码层面看不到这个变量。步骤2全部算完右边之后才把临时元组的值依次赋值给左边 a,b,ca 200b 300c 100执行完这一步a、b、c的值才发生改变。❌错误理解很多新手会搞错误以为是分步这样执行a b # a变成200 b c # b变成300 c a # 这里a已经是新的200c就会变成200结果就错了如果是上面这种分步写法结果就变成200 300 200和真实运行结果不一样。关键点 右边所有取值全部使用赋值操作发生之前的旧变量值先打包成临时元组保存 等右边全部干完才覆盖左边变量。补充小细节这个临时元组是Python解释器内部的临时对象代码中你不能直接访问它赋值结束后这个临时元组就被丢弃回收。不只是元组列表也可以解包a,b [10,20]也是一样原理。一句话总结a,b,c b,c,a先读取右边全部变量还没被修改的旧值打包成一个看不见的临时元组存放在内存再把临时元组里面的值挨个分配给左边变量。左边变量是同时更新不是改完一个再改下一个。声明本篇学习笔记参考黑马程序员相关课程部分素材来源于网络公开资料文中为个人整理复盘仅供学习交流使用。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →