Summary: This thread is for recording current use of addition in Python. This post covers the built-in types. I'll do Counter and numpy.array in another post. Please use another thread to discuss possible possible future use of addition.
BACKGROUND At present constructions such as {'a': 1} + {'b': 2} produce TypeError: unsupported operand type(s) for +: 'dict' and 'dict' Elsewhere on this list, we're discussing whether to extend dict so that it supports such constructions, and if so what semantics to give to addition of dictionaries. In this thread I intend to record the CURRENT use of addition in Python, in a neutral manner. (However, I will focus on what might be called the mathematical properties of addition in Python.) BUILT-IN TYPES In this post I talk about the exiting built-in types: see https://docs.python.org/3/library/stdtypes.html The NUMERIC types support addition, which has the following properties Commutative: a + b == b + a Associative: (a + b) + c == a + (b + c) Left-cancellation: if (a + b) == (a + c): assert b == c Right-cancellation: if (a + b) == (c + b): assert a == c Existence of zero (depending on type): zero + a == a + zero == a Multiplication by non-negative integer: a + a + .... + a == a * n == n * a Note: For floats, the equalities are ideal. For example, sometimes huge + tiny == huge + zero and so we don't exactly have cancellation. The SEQUENCE types (except range) have the following properties Associative Left-cancellation Right-cancellation Existence of zero Multiplication by non-negative integer. Note: Even though range is a sequence type, range(3) + range(3) produces TypeError: unsupported operand type(s) for +: 'range' and 'range' By the way, although documented, I find this a bit surprising: >>> (0, 1, 2) * (-1) == () True I'd have expected a ValueError. As things stand seq * (-1) * (-1) is not associative. And (-1) * seq == -seq is not true, although the left hand side is defined. CONCLUSION I've recorded the behaviour of addition for the built-in types. I'll do Counter and numpy.array in another post, later today. Please use another thread to discuss possible future use of addition. My aim in this thread is to establish and record the present use, to better support discussion of future use. -- 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/