web-dev-qa-db-fra.com

La différence entre '+ =' et '= +'?

J'ai donc un simple morceau de code qui affiche les entiers 1-10:

i = 0
while i < 10:
        i += 1
        print(i)

Ensuite, si vous modifiez un opérateur autour de la ligne 3, il affiche une quantité infinie de 1 entier (ce qui, je le comprends, explique pourquoi). Pourquoi une erreur de syntaxe ne se produit-elle pas lors de l'exécution de ce second programme? Cela n'appellerait-il pas une erreur de syntaxe dans le cas où un opérateur d'assignation serait suivi d'un opérateur d'addition ??

i = 0
while i < 10:
        i =+ 1
        print(i)
5
faceless

i+=1 est identique à i=i+1, alors que i=+1 signifie simplement i=(+1).

21
Kittsil

Les marqueurs ne nécessitent généralement pas d'espaces, à moins que des ambiguïtés ne soient nécessaires (vous avez par exemple besoin d'un espace ou de signes de ponctuation entre un nom de variable et un mot-clé de langue pour que le mot-clé puisse être reconnu).

Ainsi, x=+y, x =+ y et x = +y sont tous équivalents, invoquant dans tous les cas l'opérateur unaire + sur y et attribuant à x. L'opérateur unaire plus n'est pas couramment utilisé, mais le fait qu'il soit rare ne signifie pas qu'il n'est ni reconnu ni accepté.

À titre de comparaison, l'opérateur --> "en C/C++, etc." est un autre exemple dans lequel les humains recherchant des espaces et les générateurs de jetons les ignorant sont source de confusion .

5
ShadowRanger

i =+ 1 est identique à i = +1 ou i = 1.

2
Ned Batchelder

x=+1 est traité comme: x=(+1) 
while x+=1 est traité comme suit: x=x+1

Il existe des opérateurs binaires qui opèrent sur leur opérande à gauche et leur opérande à droite (par exemple, multiplication *) .
Et il existe des opérateurs unaires qui ne prennent que des opérandes de droite (par exemple ~ /! Negation) . Il existe des opérateurs qui peuvent être unaires et binaires.

Le signe plus en python peut également être utilisé comme opérateur de droite, tout comme le moins.

Docs Python:

L'opérateur unaire - (moins) donne la négation de son numérique argument.

L'opérateur unaire + (plus) donne son argument numérique inchangé.

1
Mercury

Il n'y a pas d'erreur de syntaxe car l'expression i =+ 1 est identique à i = (+1) et +1 est parfaitement légitime. C'est un opérateur unaire, pas l'opérateur d'addition. 

0
Fantastic Mr Fox