5

The following code does not print what I would expect:

#!/usr/bin/env python

print type(1,)
a = 1,
print type(a)

Here is the output:

<type 'int'>
<type 'tuple'>

I understand that the comma makes a into a tuple. But if that is the case how come the original print is not printing a tuple type but an int?

3 Answers 3

10

Because the tuple syntax inside a function call is also the way parameters are passed:

>>> print type(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: type() takes 1 or 3 arguments

>>> print type((1,))
<type 'tuple'>

>>> a = 1,
>>> type(a)
<type 'tuple'>

It is a syntax ambiguity for python, which it solves by deciding that you are trying to pass a parameter (if you ask me, it should be a syntax error though).

>>> print type(1,)
>>> print type(1)

Are the same.

Sign up to request clarification or add additional context in comments.

1 Comment

While the point is definitely arguable, the reason it isn't a SyntaxError to include a trailing comma in an argument list is to maintain consistency between (1,) and tuple(1,) and [1,] and list(1,).
0

Because it's not enclosed in parentheses: type((1,))

Without the extra parentheses it's treated as a simple parameter list in this context and the trailing semicolon is simply ignored.

Comments

0

type() is a function, so the python parser will pass everything between the parenthesis of the type function call as the argument tuple to that function.

Thus, to pass a literal tuple to a function call you'll always need to add the parenthesis to the tuple for the parser to recognize it as such:

print type((1,))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.