[Tutor] Parentheses and tuples [was Re: Fwd: Difference between types]

Steven D'Aprano steve at pearwood.info
Sat May 25 04:35:37 CEST 2013


On 25/05/13 04:53, Albert-Jan Roskam wrote:

> Why do I need to use a trailing comma to create a singleton tuple? Without a comma it seems to mean "parenthesized single object", ie the parentheses are basically not there.


Because round brackets are also used for grouping. You can group any expression:

z = (x+1)*y


Even an expression consisting of a single element:

z = (x+1)*(y)


That might not be a sensible thing to do, but it's not worth special-casing the parser to reject parentheses in this case. Now bring in tuples. Tuples are created by the comma operator, NOT the parentheses:

a = 23, 42, None

creates a tuple. At least one comma is necessary to distinguish an element from a tuple of one element:

a = 23  # a is the int 23
a = 23,  # a is a one-item tuple containing 23

Sometimes you use round brackets to group the tuple item, either because you need to change the precedence:

a = 23, (2, 4, 8), None

groups the three elements 2, 4, 8 into a tuple, which in turn is in a tuple:

print a
=> (23, (2, 4, 8), None)


Or we use round brackets to make a tuple just because it looks better, and matches the display of them:

a = (23, 42, None)
print a
=> (23, 42, None)

But make no mistake: it is the comma, not the brackets, that makes the tuple.

So single-item tuples are not special. They just follow the rules for multiple-item tuples, except that you only have item. That does leave the question of how to specify an empty tuple. And that is special:

a = ()

however it does match the display of empty tuples, and looks rather similar to empty lists [] and empty dicts {}.



-- 
Steven


More information about the Tutor mailing list