在python把a赋值给b_大佬们 我是刚开始学python的小白 遇到这种赋值方式 实在不懂这个a+b是赋值给谁的 求解...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这个是python独有的赋值方法 萌新不懂很正常啦

这个叫做“元组赋值法” 他会把前后两个部分当成一个元组去操作 所以在赋值过程中值不会改变 只有结束赋值后才会改变

什么意思呢 也就是说逗号前面和逗号后面赋值是【同时发生】的

举个例子

a=1

b=0

a, b = a+1, a+1

最后的结果是a和b都是2

然而如果你先a = a+1 再a = b+1 那么结果是a为2 b为3 因为这一串操作时先a后b的 而元组赋值法可以视为是【同时发生】的赋值行为

这种赋值方法可以免除我们很多的麻烦 最简单的例子就是:交换变量

以前听过一个笑话 说3个程序员 两个是学c系列语言的 还有一个是学python的 他们讨论怎么交换变量的值

普通c语言程序员写到(c的语法和python不一样 但是类似 第一行等价于def swap(a, b):):

void swap(int &a, int&b){

temp = a;

a = b;

b = temp;}

二逼c语言程序员写到:

void swap(int &a, int&b){

a = a^b;

b = a^b;

a = a^b;}

python程序员写到:

def swap(a, b):

a, b = b, a

可以看出 有了元组赋值法 其他语言至少需要3行的交换行为现在只需要1行就ok了

另外有人可能不大明白 明明没有括号 为什么他们还是元组呢?

我这里再重申一遍 元组的关键字(就是看到他就知道他是元组 比如列表的关键字是[] 字典是{})不是小括号 而是逗号

你可以尝试一下如下的代码

a = 1, 2

type(a)

返回的结果是 意思是:元组

【进阶】

那么为什么元组赋值法在过程中变量不改变呢?

首先我们补全一下这行代码(以你的代码为例):

(a, b) = (b, a+b)

好的 现在前后都是一个元组了

但是我们还是不明白 那我们把他拆开来

首先前面是一个元组:

tuple1 = (a, b)

后面也是一个:

tuple2 = (b, a+b)

假设a和b分别为1、2

那么现在

tuple1 → (1,2)

tuple2 → (2, 3)

然后我们进行赋值操作

tuple1 = tuple2

这就是结果了吗 不是的 因为tuple1是我们虚构出来的“临时变量” 并不是程序员可以直接使用的变量

于是我们还原回去

a = tuple1[0]

b = tuple1[1]

完美 这就是为什么我们称它【赋值是同时发生的】了

学完这些 机制的你会发现我们最后的赋值其实可以这么写

a, b = tuple1

这就是python简洁的妙处

“人生苦短

我用python”

——Bruce Eckel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值