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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.