a,b=b,a+b 计算和赋值的顺序是怎样的??

2014-05-22 00:28:10 +08:00
 ljcarsenal
看到用这个实现的斐波那契函数,表示不太理解
5371 次点击
所在节点    Python
26 条回复
davidli
2014-05-22 01:01:34 +08:00
类似于但不知道是不是等价于:
t=a+b
a=b
b=t
话说我来V2时的第一个问题也是这个。。。真有缘
11
2014-05-22 01:03:28 +08:00
c,d=b,a+b
a,b=c,d
dorentus
2014-05-22 01:07:20 +08:00
我猜是等价于:

x, y = b, a + b
a, b = x, y
dorentus
2014-05-22 01:09:33 +08:00
@dorentus 然后我发现这个和之前没看明白的 2 楼的答案是一模一样的…
jsonline
2014-05-22 01:29:04 +08:00
为什么要写这样的代码?拖出去打
dreampuf
2014-05-22 02:08:01 +08:00
$ python -c 'import dis; dis.dis(compile("a,b=b,a+b", "_", "single"))'
1 0 LOAD_NAME 0 (b)
3 LOAD_NAME 1 (a)
6 LOAD_NAME 0 (b)
9 BINARY_ADD
10 ROT_TWO
11 STORE_NAME 1 (a)
14 STORE_NAME 0 (b)
17 LOAD_CONST 0 (None)
20 RETURN_VALUE
ichou
2014-05-22 02:17:37 +08:00
先返回 再赋值
HatMatrix
2014-05-22 08:55:57 +08:00
这样写代码真的好么?少打几个字又不能买套房子
Mutoo
2014-05-22 09:54:12 +08:00
@HatMatrix 有很多极限编程的比赛,就是看谁的代码短小精悍。得奖了还真的能买套房子。

http://codegolf.stackexchange.com/
http://js1k.com/
simaoji
2014-05-22 09:56:57 +08:00
斐波那契数列的迭代计算?
计算过程使用状态变量描述,效率高一些。
(fib-iter (+ a b) a (- count 1))
a = a+b
b = a
zog
2014-05-22 10:03:04 +08:00
tuple赋值,左边a,b是变量,右边b,a+b是对象。a对象赋值给变量a,a+b对象赋值给b。上边有朋友用python -c描述了执行顺序。
MasterYoda
2014-05-22 10:05:56 +08:00
@Mutoo
哈哈,这么严肃的回复好无情。。
for4
2014-05-22 10:08:36 +08:00
从右到走
先运算再逻辑

顺便吐槽,“a,b=b,a+b”这个太直白了。
for4
2014-05-22 10:08:46 +08:00
从右到左
simaoji
2014-05-22 10:09:48 +08:00
好吧,没审题…… 理解错了
simaoji
2014-05-22 10:12:53 +08:00
应该是是从右到左吧
Kabie
2014-05-22 10:21:13 +08:00
。。。非常常见的用法吧。。。谁用中间变量才要拖出去打呢。。。
lu18887
2014-05-22 11:35:45 +08:00
这是并行赋值吧,比较典型的应用就是交换两个变量的值
hahastudio
2014-05-22 11:43:02 +08:00
tmp_tuple = (b, a+b)
a = tmp_tuple[0]
b = tmp_tuple[1]
jiang42
2014-05-22 12:40:38 +08:00
我果然还是不够pythonic。。。
看半天以为是 C 代码
然后看回复才想起来这是unpacking

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/113671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX