84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
Pourquoi
s = [1, 2, 3, 4, 5, 6]i = 0i = s[i] = 3 Le résultat est : [1, 2, 3, 3, 5, 6] et pas [3, 2, 3, 4, 5, 6]
Vous pouvez vous référer à un article que j'ai écrit ci-dessous : Python : Les pièges de l'affectation chaînée
Selon les déclarations d'affectation :
a = b = c = d = ... = E
équivaut à
a = E b = E c = E d = E ...
Donc : i=s[i]=3 équivaut à :
i=s[i]=3
i = 3 s[i] = 3
La affectation en Python est une instruction, pas un opérateur, donc l'expression (a=b) produira une erreur de syntaxe, et l'instruction affectation n'a aucune valeur.
(a=b)
Référence https://stackoverflow.com/que...
s = [1, 2, 3, 4, 5, 6] i = 0 temp_value = 3 i = temp_value s[i] = temp_value
D'abord, i devient 3, puis la valeur s[i] est attribuée
En regardant les résultats, i=3 a été exécuté avant s[i] = 3.
Ne peux-tu pas simplement l'écrire en deux phrases distinctes ?
Vous pouvez utiliser PythonTutor.com i = s[i] = 3 Cette ligne exécute essentiellement i=3 et s[i]=3 successivement
i = s[i] = 3 等价于 i = 3; s[i] = 3
i = s[i] = 3
i = 3; s[i] = 3
Utilisez le module dis pour analyser le processus d'exécution :
>>> 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
Exemple d'écriture séparée
>>> 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 >>>
Vous pouvez vous référer à un article que j'ai écrit ci-dessous : Python : Les pièges de l'affectation chaînée
Selon les déclarations d'affectation :
équivaut à
Donc :
i=s[i]=3
équivaut à :La affectation en Python est une instruction, pas un opérateur, donc l'expression
(a=b)
produira une erreur de syntaxe, et l'instruction affectation n'a aucune valeur.Référence https://stackoverflow.com/que...
équivaut à
D'abord, i devient 3, puis la valeur s[i] est attribuée
En regardant les résultats, i=3 a été exécuté avant s[i] = 3.
Ne peux-tu pas simplement l'écrire en deux phrases distinctes ?
Vous pouvez utiliser PythonTutor.com
i = s[i] = 3 Cette ligne exécute essentiellement i=3 et s[i]=3 successivement
i = s[i] = 3
等价于i = 3; s[i] = 3
Utilisez le module dis pour analyser le processus d'exécution :
Exemple d'écriture séparée