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