Rumah > Soal Jawab > teks badan
Kenapa
s = [1, 2, 3, 4, 5, 6]
i = 0
i = s[i] = 3
Hasilnya ialah: [1, 2, 3, 3, 5, 6] dan Bukan [3, 2, 3, 4, 5, 6]
PHP中文网2017-06-12 09:26:18
Anda boleh merujuk artikel yang saya tulis di bawah: Python: The Pitfalls of Chained Assignment
扔个三星炸死你2017-06-12 09:26:18
Mengikut penyata Tugasan:
a = b = c = d = ... = E
bersamaan dengan
a = E
b = E
c = E
d = E
...
Jadi: i=s[i]=3
bersamaan dengan:
i = 3
s[i] = 3
tugasan dalam Python ialah pernyataan, bukan operator, jadi ungkapan (a=b)
akan menghasilkan ralat sintaks, dan penyataan tugasan tidak mempunyai nilai.
怪我咯2017-06-12 09:26:18
Rujukan https://stackoverflow.com/que...
bersamaan dengan
s = [1, 2, 3, 4, 5, 6]
i = 0
temp_value = 3
i = temp_value
s[i] = temp_value
Mula-mula, i menjadi 3, dan kemudian nilai s[i] diberikan
滿天的星座2017-06-12 09:26:18
Melihat kembali keputusan, i=3 telah dilaksanakan sebelum s[i] = 3.
Tidak bolehkah anda menulisnya dalam dua ayat yang berasingan?
仅有的幸福2017-06-12 09:26:18
Anda boleh menggunakan PythonTutor.com
i = s[i] = 3 Baris itu pada asasnya melaksanakan i=3 dan s[i]=3 berturut-turut
typecho2017-06-12 09:26:18
i = s[i] = 3
等价于 i = 3; s[i] = 3
Gunakan modul dis untuk menganalisis proses pelaksanaan:
>>> 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 # 复制栈顶,也就是 常量3
34 STORE_FAST 1 (i) # i = 3
37 LOAD_FAST 0 (s)
40 LOAD_FAST 1 (i)
43 STORE_SUBSCR # s[i] = 3
44 LOAD_CONST 0 (None) # 返回 None
47 RETURN_VALUE
Contoh tulisan berasingan
>>> 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_FAST 0 (s)
42 LOAD_FAST 1 (i)
45 STORE_SUBSCR # s[i] = 3
46 LOAD_CONST 0 (None)
49 RETURN_VALUE
>>>