Tuples, which are immutable (unchangeable) sequence objects in Python.
Care must be taken when generating tuples with a single element or empty tuples.
The following details are described here.
- Tuple with 1 element
- Tuple round brackets can be omitted.
- Empty tuple
- Tuples in function arguments
Tuple with 1 element
If you try to generate a tuple with one element and write only one object inside the round brackets (), the round brackets () will be ignored and processed and not considered a tuple.
single_tuple_error = (0)
print(single_tuple_error)
print(type(single_tuple_error))
# 0
# <class 'int'>
A trailing comma is required to generate a tuple with one element.
single_tuple = (0, )
print(single_tuple)
print(type(single_tuple))
# (0,)
# <class 'tuple'>
For example, when using the + operator to concatenate multiple tuples, note that if you try to add one element and forget a comma, you will get an error.
# print((0, 1, 2) + (3))
# TypeError: can only concatenate tuple (not "int") to tuple
print((0, 1, 2) + (3, ))
# (0, 1, 2, 3)
Tuple round brackets can be omitted.
The reason why a tuple with one element needs a comma is because a tuple is not a value enclosed in round brackets () but a value separated by a comma.
It is the comma that creates the tuple, not the round brackets.
Tuples — Built-in Types — Python 3.10.4 Documentation
Even if the round brackets () are omitted, it is processed as a tuple.
t = 0, 1, 2
print(t)
print(type(t))
# (0, 1, 2)
# <class 'tuple'>
Note that an unnecessary comma after an object is considered a tuple.
t_ = 0,
print(t_)
print(type(t_))
# (0,)
# <class 'tuple'>
Empty tuple
As mentioned above, the round brackets () can be omitted when representing a tuple, but are required when generating an empty tuple.
A space or comma alone will result in a SyntaxError.
empty_tuple = ()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
# empty_tuple_error =
# SyntaxError: invalid syntax
# empty_tuple_error = ,
# SyntaxError: invalid syntax
# empty_tuple_error = (,)
# SyntaxError: invalid syntax
Empty tuples can also be generated by tuple() with no arguments.
empty_tuple = tuple()
print(empty_tuple)
print(type(empty_tuple))
# ()
# <class 'tuple'>
Tuples in function arguments
Tuple round brackets () are required even when there is a syntactic ambiguity.
Function arguments are separated by commas, but in this case, it is necessary to explicitly indicate whether the function is a tuple or not by the presence or absence of round brackets ().
Without parentheses (), each value is passed to each argument; with parentheses (), each value is passed as a tuple to one argument.
def example(a, b):
print(a, type(a))
print(b, type(b))
example(0, 1)
# 0 <class 'int'>
# 1 <class 'int'>
# example((0, 1))
# TypeError: example() missing 1 required positional argument: 'b'
example((0, 1), 2)
# (0, 1) <class 'tuple'>
# 2 <class 'int'>
If the tuple is marked with an asterisk *, the elements of the tuple can be expanded and passed as arguments.
example(*(0, 1))
# 0 <class 'int'>
# 1 <class 'int'>
For more information, see the following article.