求問(wèn)Python的一個(gè)列表賦值問(wèn)題
問(wèn)題描述
為什么
s = [1, 2, 3, 4, 5, 6]i = 0i = s[i] = 3 結(jié)果是: [1, 2, 3, 3, 5, 6] 而不是 [3, 2, 3, 4, 5, 6]
問(wèn)題解答
回答1:可以參考下寫過(guò)的一篇文章: Python: 鏈?zhǔn)劫x值的坑
回答2:根據(jù) Assignment statements 可知:
a = b = c = d = ... = E
等同于
a = Eb = Ec = Ed = E...
所以: i=s[i]=3等同于:
i = 3s[i] = 3
Python 中的賦值是一個(gè)語(yǔ)句,并不是一個(gè)操作符,所以表達(dá)式(a=b)會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤,賦值語(yǔ)句沒(méi)有值.
回答3:參考 https://stackoverflow.com/que...
等同于
s = [1, 2, 3, 4, 5, 6]i = 0temp_value = 3i = temp_values[i] = temp_value
首先是i變成了3,然后才賦值s[i]
回答4:看結(jié)果反推,是i=3 在 s[i] = 3之前執(zhí)行了。
你就分開(kāi)兩句寫不行嗎?
回答5:可使用 PythonTutor.com i = s[i] = 3 那一行基本上就是先後執(zhí)行i=3 及s[i]=3

i = s[i] = 3 等價(jià)于 i = 3; s[i] = 3
用dis模塊來(lái)解析執(zhí)行過(guò)程:
>>> def f(): s = [1, 2, 3, 4, 5, 6] i = 0 i = s[i] = 3 >>> import dis>>> dis.dis(f) 2 0 LOAD_CONST 1 (1) 3 LOAD_CONST 2 (2) 6 LOAD_CONST 3 (3) 9 LOAD_CONST 4 (4) 12 LOAD_CONST 5 (5) 15 LOAD_CONST 6 (6) 18 BUILD_LIST 6 21 STORE_FAST 0 (s) # s = [1, 2, 3, 4, 5, 6] 3 24 LOAD_CONST 7 (0) 27 STORE_FAST 1 (i) # i = 0 4 30 LOAD_CONST 3 (3) # 常量3 入棧 33 DUP_TOP# 復(fù)制棧頂,也就是 常量3 34 STORE_FAST 1 (i) # i = 3 37 LOAD_FAST0 (s) 40 LOAD_FAST1 (i) 43 STORE_SUBSCR # s[i] = 3 44 LOAD_CONST 0 (None) # 返回 None 47 RETURN_VALUE
分開(kāi)寫的例子
>>> def f2(): s = [1, 2, 3, 4, 5, 6] i = 0 i = 3 s[i] = 3 >>> dis.dis(f2) 2 0 LOAD_CONST 1 (1) 3 LOAD_CONST 2 (2) 6 LOAD_CONST 3 (3) 9 LOAD_CONST 4 (4) 12 LOAD_CONST 5 (5) 15 LOAD_CONST 6 (6) 18 BUILD_LIST 6 21 STORE_FAST 0 (s) # s = [1, 2, 3, 4, 5, 6] 3 24 LOAD_CONST 7 (0) 27 STORE_FAST 1 (i) # i = 0 4 30 LOAD_CONST 3 (3) 33 STORE_FAST 1 (i) # i = 3 5 36 LOAD_CONST 3 (3) 39 LOAD_FAST0 (s) 42 LOAD_FAST1 (i) 45 STORE_SUBSCR # s[i] = 3 46 LOAD_CONST 0 (None) 49 RETURN_VALUE>>>
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問(wèn)題2. 關(guān)于docker下的nginx壓力測(cè)試3. docker - 如何修改運(yùn)行中容器的配置4. docker鏡像push報(bào)錯(cuò)5. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””6. 我何時(shí)應(yīng)該在Java中使用JFrame.add(component)和JFrame.getContentPane()。add(component)7. javascript - 請(qǐng)指條明路,angular的$event,在select中卻是undefined?8. html5和Flash對(duì)抗是什么情況?9. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????10. html - css氣泡,實(shí)現(xiàn)“倒三角(不知道算不算三角了)”可透明的。

網(wǎng)公網(wǎng)安備