
1 davidli May 22, 2014 类似于但不知道是不是等价于: t=a+b a=b b=t 话说我来V2时的第一个问题也是这个。。。真有缘 |
2 11 May 22, 2014 c,d=b,a+b a,b=c,d |
3 dorentus May 22, 2014 via iPad 我猜是等价于: x, y = b, a + b a, b = x, y |
5 jsonline May 22, 2014 为什么要写这样的代码?拖出去打 |
6 dreampuf May 22, 2014 $ 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 |
7 ichou May 22, 2014 先返回 再赋值 |
8 HatMatrix May 22, 2014 这样写代码真的好么?少打几个字又不能买套房子 |
9 Mutoo May 22, 2014 |
10 simaoji May 22, 2014 斐波那契数列的迭代计算? 计算过程使用状态变量描述,效率高一些。 (fib-iter (+ a b) a (- count 1)) a = a+b b = a |
11 zog May 22, 2014 tuple赋值,左边a,b是变量,右边b,a+b是对象。a对象赋值给变量a,a+b对象赋值给b。上边有朋友用python -c描述了执行顺序。 |
12 MasterYoda May 22, 2014 @Mutoo 哈哈,这么严肃的回复好无情。。 |
13 for4 May 22, 2014 从右到走 先运算再逻辑 顺便吐槽,“a,b=b,a+b”这个太直白了。 |
14 for4 May 22, 2014 从右到左 |
15 simaoji May 22, 2014 好吧,没审题…… 理解错了 |
16 simaoji May 22, 2014 应该是是从右到左吧 |
17 Kabie May 22, 2014 。。。非常常见的用法吧。。。谁用中间变量才要拖出去打呢。。。 |
18 lu18887 May 22, 2014 这是并行赋值吧,比较典型的应用就是交换两个变量的值 |
19 hahastudio May 22, 2014 tmp_tuple = (b, a+b) a = tmp_tuple[0] b = tmp_tuple[1] |
20 jiang42 May 22, 2014 我果然还是不够pythonic。。。 看半天以为是 C 代码 然后看回复才想起来这是unpacking |
22 tioover May 22, 2014 先算出左右两边的tuple然后赋值 |
23 bravluna May 22, 2014 py 会临时建立个 tuple (b, a+b),这样就明白了吧? |
24 bravluna May 22, 2014 所以 py 里交换变量值不需要再来个临时变量:a,b = b,a ,就可以交换 |
26 hooluupog May 24, 2014 对于多变量赋值语句a,b = b,a 编译器会首先计算完右边的变量值然后依次进行赋值(当然,有的语言支持惰性求值的情况例外)。所以: a=1 b=2 a,b=b,a 其实就是:a,b = 2,1 |