Summary: I recast an example in a more abstract form. Steve D'Aprano wrote: > Think about a more complex assignment: > text .= encode(spam) + str(eggs)
I find this example instructive. I hope the following is also instructive: $ python3 >>> obj += incr NameError: name 'obj' is not defined >>> obj = object() >>> obj += incr NameError: name 'incr' is not defined >>> incr = 1 >>> obj += incr TypeError: unsupported operand type(s) for +=: 'object' and 'int' >>> incr = object() >>> obj += incr TypeError: unsupported operand type(s) for +=: 'object' and 'object' >>> obj += [] + () TypeError: can only concatenate list (not "tuple") to list To me this shows that LHS += RHS works as follows: 1. Evaluate the LHS (as an assignable object). 2. Evaluate the RHS (as a value). and then some more steps, not covered in my example. As syntax the compound symbols '+=' and '.=' are similar. But in semantics, '+=' does and '.=' does not have an evaluation of the RHS as an expression. This is, in abstract terms, the origin of Steve's example. Someone else has noted that '+=' and its variants are focused on numeric operations, such as addition. This shows, to me, that the simplification provided by use cases such as text = text.replace("foo","bar") has to be compared to the complexity introduced by text .= encode(spam) + str(eggs) In other words, I've restated Steve's example, in a more abstract form. I hope it helps to have another way to look at this example. Finally, I note >>> a = 2 >>> a **= 3 >>> a 8 -- Jonathan _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/