新手关于 Python 运算符的问题?
ringa_lee
ringa_lee 2017-04-17 11:54:54
[Python讨论组]
a , b = b , a + b

这个是不是等价于

a = b
b = a + b

测试起来好像不是,那是怎么解释的? 是求斐波那契函数中的:

def fab(max):
    n,a,b = 0,0,1
    while n < max:
        print b
        a , b = b , a+b
        n = n + 1
ringa_lee
ringa_lee

ringa_lee

全部回复(4)
PHP中文网
a , b = b , a + b

相当于

tmp = a
a = b
b = tmp + b

少使用了存储单元tmp

黄舟

不等价

a , b = b , a + b

中后面a+b中的a还是原来的a,不是把b的值赋值给a之后的a

a = b
b = a + b

不同。

a, b = x, y

属于奇技淫巧,少打几个字,但是有坑。

PHP中文网

python 的

a, b = b, a

和以下代码

tmp = a
a = b
b = tmp + b

是不一样的实现。
在 python 里一切皆对象,等号右边其实是省略了括号的tuple,因此上述代码应该如此理解:

a, b = (b, a)

(b, a) 是一个新生成的 tuple 对象, tuple可以进行特殊赋值,将里面的元素赋值给多个变量, 从而实现了a, b 的交换。

因此,这也就是为什么a , b = b , a + b 后面a+b中的a 还是原来的a的原因。

PHPz

楼主在看python高级编程把...今天我也开始刷这本书了.发现了这个问题.突然想到了有这麽一个帖子.收藏了.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号