84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
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