Kenapa
s = [1, 2, 3, 4, 5, 6]i = 0i = s[i] = 3 Hasilnya ialah: [1, 2, 3, 3, 5, 6] dan Bukan [3, 2, 3, 4, 5, 6]
Anda boleh merujuk artikel yang saya tulis di bawah: Python: The Pitfalls of Chained Assignment
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=s[i]=3
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.
(a=b)
Rujukan https://stackoverflow.com/que...
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
Melihat kembali keputusan, i=3 telah dilaksanakan sebelum s[i] = 3.
Tidak bolehkah anda menulisnya dalam dua ayat yang berasingan?
Anda boleh menggunakan PythonTutor.com i = s[i] = 3 Baris itu pada asasnya melaksanakan i=3 dan s[i]=3 berturut-turut
i = s[i] = 3 等价于 i = 3; s[i] = 3
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 >>>
Anda boleh merujuk artikel yang saya tulis di bawah: Python: The Pitfalls of Chained Assignment
Mengikut penyata Tugasan:
bersamaan dengan
Jadi:
i=s[i]=3
bersamaan dengan:tugasan dalam Python ialah pernyataan, bukan operator, jadi ungkapan
(a=b)
akan menghasilkan ralat sintaks, dan penyataan tugasan tidak mempunyai nilai.Rujukan https://stackoverflow.com/que...
bersamaan dengan
Mula-mula, i menjadi 3, dan kemudian nilai s[i] diberikan
Melihat kembali keputusan, i=3 telah dilaksanakan sebelum s[i] = 3.
Tidak bolehkah anda menulisnya dalam dua ayat yang berasingan?
Anda boleh menggunakan PythonTutor.com
i = s[i] = 3 Baris itu pada asasnya melaksanakan i=3 dan s[i]=3 berturut-turut
i = s[i] = 3
等价于i = 3; s[i] = 3
Gunakan modul dis untuk menganalisis proses pelaksanaan:
Contoh tulisan berasingan