Bertanya tentang masalah tugasan senarai dalam Python
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-12 09:24:18
0
6
984

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]

女神的闺蜜爱上我
女神的闺蜜爱上我

membalas semua(6)
Ty80

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 = 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.

刘奇

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

滿天的星座

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

typecho

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
>>> 
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan